时间限制:1秒 空间限制:32768K
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
1 function TreeNode(x) { 2 this.val = x; 3 this.left = null; 4 this.right = null; 5 } 6 function reConstructBinaryTree(pre, vin) 7 { 8 // 只有一个节点时 9 var roots; 10 if (pre.length === 0) { 11 return null; 12 } 13 if (pre.length === 1) { 14 roots = new TreeNode(pre[0]); 15 return roots; 16 } 17 roots = new TreeNode(pre[0]); 18 var index = vin.indexOf(pre[0]); 19 left_pre = pre.slice(1,index+1); 20 left_vin= vin.slice(0,index); 21 roots.left = reConstructBinaryTree(left_pre,left_vin); 22 right_pre = pre.slice(index+1); 23 right_vin = vin.slice(index+1); 24 roots.right = reConstructBinaryTree(right_pre, right_vin); 25 return roots; 26 }
tips :最开始以为传入的pre和vin是对象,打印了一下是数组。返回的一定要是TreeNode的对象,不然后台没法处理。
emmm......递归建树,貌似。。。没什么好说的~