题解 | #重建二叉树#

重建二叉树

http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

思路:先序遍历列表的第一个节点一定是二叉树的根节点,也是中序遍历列表中划分左右子树的关键。

在中序遍历列表中找到先序遍历列表中第一个节点,以此为界限可以将二叉树分为左右子树,可以得知左子树和右子树的长度,在先序遍历列表中划分出来。再依次拿出先序遍历列表中的第一个节点构成左/右子树的根节点,直到传入的先序序列或中序序列为空结束遍历,返回根节点。

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function reConstructBinaryTree(pre, vin)
{

    if(!pre.length||!vin.length){
        return null
    }
    let root = pre[0]
    let tnode = new TreeNode(root)
    let index = vin.indexOf(root)
    tnode.left = reConstructBinaryTree(pre.slice(1,index+1),vin.slice(0,index))
    tnode.right = reConstructBinaryTree(pre.slice(index+1),vin.slice(index+1))
    return tnode
}
module.exports = {
    reConstructBinaryTree : reConstructBinaryTree
};
全部评论

相关推荐

昨天 09:08
裁应届生,一分钱补偿没有,离职了还脑控你,跟踪你,定位你,丁东服务是搞系每一个人
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 9人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
6 收藏 评论
分享
牛客网
牛客企业服务