【树】Construct Binary Tree from Inorder and Postorder Traversal
2016-02-05 13:29
405 查看
题目:
Given inorder and postorder traversal of a tree, construct the binary tree.
思路:
后序序列的最后一个元素就是树根,然后在中序序列中找到这个元素(由于题目保证没有相同的元素,因此可以唯一找到),中序序列中这个元素的左边就是左子树的中序,右边就是右子树的中序,然后根据刚才中序序列中左右子树的元素个数可以在后序序列中找到左右子树的后序序列,然后递归的求解即可。
Given inorder and postorder traversal of a tree, construct the binary tree.
思路:
后序序列的最后一个元素就是树根,然后在中序序列中找到这个元素(由于题目保证没有相同的元素,因此可以唯一找到),中序序列中这个元素的左边就是左子树的中序,右边就是右子树的中序,然后根据刚才中序序列中左右子树的元素个数可以在后序序列中找到左右子树的后序序列,然后递归的求解即可。
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {number[]} inorder * @param {number[]} postorder * @return {TreeNode} */ var buildTree = function(inorder, postorder) { if(postorder.length==0){ return null; } return BuildTree(0,inorder.length-1,0,postorder.length-1,inorder,postorder); }; function BuildTree(iStart,iEnd,pStart,pEnd,inorder,postorder){ if(pStart==pEnd){ return new TreeNode(postorder[pEnd]); } if(iStart>iEnd){ return null; } var rootval=postorder[pEnd]; var i=inorder.indexOf(rootval); var root=new TreeNode(rootval); root.left=BuildTree(iStart,i-1,pStart,pStart+(i-iStart)-1,inorder,postorder); root.right=BuildTree(i+1,iEnd,pStart+(i-iStart),pEnd-1,inorder,postorder); return root; }
相关文章推荐
- 冒泡排序算法
- 【freeradius3】安装和拓展需求
- 【freeradius3】安装和拓展需求
- vijos-p1014 2008.11.6
- vijos-p1133 2008.11.6
- [转载]iOS Provisioning Profile(Certificate)与Code Signing详解
- PHP---日期时间
- 使用Hibernate时出现“could not execute query”异常
- HDU 1007
- noip2007守望着的逃离 2008.11.5
- noip2004-虫食算 2008.11.5
- time stamp in javascript
- 表头无权限分组构件
- 【动态规划】[BZOJ1037][ZJOI2008]生日聚会Party
- jQuery工具函数
- Activity,ContextImpl,PhoneWindow对象创建总结
- noip2002字串变换 2008.11.5
- Atom packages installing error gyp trubingshot
- POJ 2777 线段树区间查询区间更新
- MmGetSystemRoutineAddress routine