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

137 阅读1分钟

一 问题

二 代码

let buildTree = function(inorder, postorder) {
    let helper=function(instart,inend,poststart,postend){
        if(instart>inend||poststart>postend) return null;
        //后序遍历中最后一个节点是根节点
        let value=postorder[postend];
        let index=inorder.indexOf(value);
        let countleft=index-instart;
        let root=new TreeNode(value);
        //注意poststart+countleft-1,这里需要减一
        root.left=helper(instart,index-1,poststart,poststart+countleft-1);
        root.right=helper(index+1,inend,poststart+countleft,postend-1);
        return root;
    }
    return helper(0,inorder.length-1,0,postorder.length-1);
};