题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
分析前序遍历是中左右的顺序,中序遍历是左中右的顺序,那么对于{1,2,4,7,3,5,6,8}和{4,7,2,1,5,3,8,6}来说,1是根节点,然后1把中序遍历的序列分割为两部分,“4,7,2”为1的左子树上的节点,“5,3,8,6”为1的右子树上的节点,这样递归的分解下去即可
代码实现/* function treenode(x) { this.val = x; this.left = null; this.right = null;} */function reconstructbinarytree(pre, vin){ var root = recon(0, pre.length-1, pre, 0, vin.length-1, vin); return root;}function recon(prestart, preend, pre, vinstart, vinend, vin){ if(prestart > preend || vinstart > vinend) { return null; } var node = new treenode(pre[prestart]); for(var i = vinstart;i <= vinend;i++) { if(vin[i] === pre[prestart]){ node.left = recon(prestart+1, prestart+i-vinstart, pre, vinstart, i-1, vin); node.right = recon(prestart+i-vinstart+1, preend, pre, i+1, vinend, vin); } } return node;}
相关推荐:
js中字符串的全排列的算法解析
js如何实现将上传图片并且压缩的方法
以上就是js实现重建二叉树的算法解析的详细内容。
