【中等】重建二叉树- 2.26

53 阅读1分钟

题目链接:

题目简述:

image.png

题解:

/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param preOrder int整型一维数组 
 * @param vinOrder int整型一维数组 
 * @return TreeNode类
 */
function reConstructBinaryTree( preOrder ,  vinOrder ) {
    // write code here
    if (!preOrder.length || !vinOrder.length) return null // 递归终止条件
    const root = new TreeNode(preOrder.shift()) // 取到根结点
    const index = vinOrder.indexOf(root.val) // 取到该结点在中序遍历的索引
    // 组合左右子树
    root.left = reConstructBinaryTree(preOrder, vinOrder.slice(0, index))
    root.right = reConstructBinaryTree(preOrder, vinOrder.slice(index + 1))
    return root
}

总结:

前序遍历:根节点 > 左子树 > 右子树

中序遍历:左子树 > 根结点 > 右子树

组合思路:将前序遍历的结点一个个取出,在中序遍历中获取索引,并可以得知索引左侧是其左子树上的结点,索引右侧是其右子树的结点,不断的递归组合,直至到结点为null