输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
function reConstructBinaryTree(pre, vin) { if(pre.length==0 || vin.length==0){ return null; } //前序遍历的第一个节点为根节点 var root=pre[0]; //找到在中序遍历中 根节点的索引 var index=vin.indexOf(root); //根据根节点索引,可以在中序遍历中,将二叉树分为左子树和右子树 var left=vin.slice(0,index); var right=vin.slice(index+1); var node=new TreeNode(root); //重建的二叉树的左子树和右子树也可以根据上面的步骤推导出来 //左子树是根据前序和中序的左子树推导 //右子树也是根据前序和中序的右子树推导 node.left=reConstructBinaryTree(pre.slice(1,index+1),left); node.right=reConstructBinaryTree(pre.slice(index+1),right); return node; }