从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

3
/ \
9 20
/ \
15 7

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {number[]} preorder
 * @param {number[]} inorder
 * @return {TreeNode}
 */
var buildTree = function(preorder, inorder) {
     if(!preorder.length&&!inorder.length)
        return null;
    let root = preorder[0];
    let index = inorder.indexOf(root);
    let inoLeft = inorder.slice(0,index); 
    let inoright = inorder.slice(index+1);
    let preLeft = preorder.slice(1,index+1);
    let preright = preorder.slice(index+1);

    let tree = new TreeNode(root);
    tree.left = buildTree(preLeft,inoLeft);
    tree.right = buildTree(preright,inoright);
    return tree;
};

实现:先获取根节点的数据,然后获取到每个前序和中序序列中的左右子树,然后根据左右子树的前序和中序递归计算出每个子树中的根节点。

 

来源:https://leetcode-cn.com/u/nedi2016019/

 

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2019-11-12 21:41  唐糖PJS  阅读(166)  评论(0编辑  收藏  举报