【105】根据前序和中序遍历构建二叉树

在这里插入图片描述

在这里插入图片描述
解题思路:
构建一个二叉树需要构建三部分:root、左子树、右子树
左子树、右子树的构建,又包括:root、左子树、右子树
解题关键在于定位出根节点,划分出左右子树,然后 递归 构建左右子树
解题参考:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solution/ding-wei-chu-gen-jie-dian-de-wei-zhi-hua-fen-zuo-y/

var buildTree = function(preorder, inorder) {
    // 递归出口: 前序数组中的元素被用完了
    if(preorder.length === 0) return null;
    // 前序遍历的第一个元素为根元素
    const tem = preorder[0];
    // 创建一个二叉树
    let root = new TreeNode(tem);
    // 获取根元素在中序遍历中的位置下标index, 则以该根元素可以进行切割左右子树:左子树为inorder.slice(0, index), 右子树为inorder.slice(index+1);
    // 前序遍历中左右子树进行切割的依据是:左子树的长度根据中序遍历左子树的长度(长度index)来决定,所以前序遍历的左子树为preorder.slice(1, 1 + index), 右子树长度为preoder.slice(1+index)
    let index = inorder.indexOf(tem); // 即是根节点的下标,同时也是左子树的长度
    // 递归构建树左子节点:左子树的前序数组,左子树的中序数组
    root.left = buildTree(preorder.slice(1, 1 + index), inorder.slice(0, index));
    // 递归构建树右子节点:右子树的前序数组,右子树的中序数组
    root.right = buildTree(preorder.slice(1+index), inorder.slice(index+1));
    return root;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值