用js刷剑指offer(重建二叉树)

题目描述

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

牛客网链接

js代码

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function reConstructBinaryTree(pre, vin)
{
    // write code here
    const root = reConstructBinaryTreeHelp(pre, 0, pre.length-1, vin, 0, vin.length-1)
    return root
}
function reConstructBinaryTreeHelp(pre, preStart, preEnd, mid, midStart, midEnd){
    if (preStart > preEnd || midStart > midEnd) {
        return null
    }
    const root = new TreeNode(pre[preStart])
    for (let i = midStart; i <= midEnd; i++){
        if (mid[i] === pre[preStart]){
            root.left = reConstructBinaryTreeHelp(pre, preStart+1, i-midStart+preStart, mid, midStart, i-1)
            root.right = reConstructBinaryTreeHelp(pre, i-midStart+preStart+1, preEnd, mid, i+1, midEnd)
            break
        }
    }
    return root
}
posted @ 2019-09-20 11:32  1Shuan  阅读(119)  评论(0)    收藏  举报