leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 中后序构造BST
来源:互联网 发布:淘宝开团是不是很难抢 编辑:程序博客网 时间:2024/06/07 00:24
Given inorder and postorder traversal of a tree, construct the binary tree.
题意很简答,就是根据中序遍历和后序遍历来构造二叉搜索树BST,直接递归去做。
查询index可以使用map做查询。建议和上一道题 leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 中前序构造BST一起学习。
代码如下:
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}/* * 直接递归解决 * */public class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { if(inorder==null || inorder.length<=0 ||postorder==null || postorder.length<=0 || inorder.length!=postorder.length) return null; else return getRootByRecursion(inorder,postorder,inorder.length-1,0,inorder.length-1); } //递归生成二叉树 TreeNode getRootByRecursion(int[] inorder, int[] postorder,int postEnd, int inStart, int inEnd) { if(inStart > inEnd) return null; else { //后续的第一个节点就是父节点 TreeNode root=new TreeNode(postorder[postEnd]); //或许在中序中的index int index=getIndexInOrder(inorder,root.val); //lenLeft是左子树的元素数量 int lenLeft=(index-1)-inStart +1; //lenRight是右子树的元素数量 int lenRight=(inEnd-inStart + 1) -lenLeft -1; //递归生成左右子树 if(lenLeft>0) root.left=getRootByRecursion(inorder,postorder, postEnd-lenRight-1, inStart, index-1); if(lenRight>0) root.right=getRootByRecursion(inorder,postorder, postEnd-1, index+1, inEnd); return root; } } //在中序中查找下标,这里也可以使用map来实现查表 int getIndexInOrder(int[] inorder, int val) { for(int i=0;i<inorder.length;i++) { if(val==inorder[i]) return i; } return -1; }}
下面是C++的做法,和上一道题一模一样,不过把前序遍历换成了后序遍历,就是递归解决
代码如下:
#include <iostream>#include <vector>#include <algorithm>using namespace std;/*struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};*/class Solution {public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if (inorder.size() <= 0) return NULL; else return getAll(postorder, inorder, postorder.size()-1, 0, inorder.size() - 1); } TreeNode* getAll(vector<int>& p, vector<int>& i,int pbeg,int ibeg,int iend) { if (ibeg > iend) return NULL; else { int index = getIndex(i, p[pbeg]); int leftLen = (index - 1) - ibeg + 1; int rightLen = (iend - ibeg + 1) - leftLen - 1; TreeNode* root = new TreeNode(p[pbeg]); root->left = getAll(p, i, pbeg -rightLen - 1, ibeg, index - 1); root->right = getAll(p, i, pbeg - 1, index+1, iend); return root; } } int getIndex(vector<int>& a, int target) { for (int i = 0; i < a.size(); i++) { if (a[i] == target) return i; } return 0; }};
阅读全文
0 0
- leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 中后序构造BST
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode --- 106. Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode]*106.Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode] 106.Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode#106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode *** 106. Construct Binary Tree from Inorder and Postorder Traversal
- 【leetcode】106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode-106.Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode - 106. Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode]106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode-106. Construct Binary Tree from Inorder and Postorder Traversal
- 从头到尾解析Hash 表算法 作者:July、wuliming、pkuoliver 出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容,
- 第三周项目一(1) 建立线性表
- 步进电机的失步和过冲是什么意思
- STL源码分析之vector(三)—其它函数 eraser()、operator[]和operator =
- VMware Workstation Pro安装MS-DOS
- leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 中后序构造BST
- 数据挖掘
- 判断网络连接状态
- C#各种命名缩写
- SSM框架的整合思路&功能实现
- 游戏在与互联网这个载体融合的过程会发生什么变化?
- 高级钟点秘书——会议安排
- 负数的二进制表示
- 面向对象程序设计上机练习四(变量引用)