剑指offer4:重建二叉树
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&&tqId=11157&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
示例:输入:[1,2,3,4,5,6,7] , [3,2,4,1,6,5,7]
返回值:{1,2,5,3,4,6,7}
思路:
1:判断前序或者中序的数组的长度是否为空,空则返回null停止
2:核心节点是前序的第一个节点,为根节点,取出放到temp中
3:找到中序数组中核心节点(根节点)的位置,并保存在index中
4:创建一个根节点,然后递归节点的左右子树
function reConstructBinaryTree(pre, vin) { // write code here if(!pre.length || !vin.length) return null let temp = pre[0] let node = new TreeNode(temp) let index = vin.indexOf(temp) node.left = reConstructBinaryTree(pre.slice(1,index+1),vin.slice(0,index)) node.right = reConstructBinaryTree(pre.slice(index+1),vin.slice(index+1)) return node }