剑指offer--4.重建二叉树

Posted sarah-wen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer--4.重建二叉树相关的知识,希望对你有一定的参考价值。

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路:1. 前序遍历首位是根节点,找到根节点之后,根据中序遍历找到左右子树

           2. 把找到的根节点从pre里删除,分别找到1中的左右子树, preleft preright vinleft vinright

   3. 然后左右子树带入1中

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function reConstructBinaryTree(pre, vin)
{
    var result = null;
    if(pre.length>1) {
        var root= pre[0];
        var vinrootindex = vin.indexOf(root);
        var vinleft = vin.slice(0,vinrootindex);
        var vinright = vin.slice(vinrootindex+1,vin.length);
        pre.shift();
        var preleft = pre.slice(0,vinleft.length);
        var preright = pre.slice(vinleft.length,pre.length);
        result = {
            val : root,
            left : reConstructBinaryTree(preleft,vinleft),
            right : reConstructBinaryTree(preright,vinright)
        }
    }
    else if(pre.length===1) {
        result={
            val: pre[0],
            left: null,
            right: null
        }
    }
    
    return result;
}

 

以上是关于剑指offer--4.重建二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--4.重建二叉树

剑指offer重建二叉树

剑指offer(三十三)之重建二叉树

java刷题-剑指offer 07 重建二叉树

《剑指offer》— JavaScript重建二叉树

剑指offer重建二叉树python