题目链接:
- 牛客网:JZ7 重建二叉树
题目简述:
题解:
/*
* 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