LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
来源:互联网 发布:中国银行金融软件 编辑:程序博客网 时间:2024/05/18 17:42
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
/** * Definition for binary tree * 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) { int size = postorder.size() - 1; return getTree(inorder, postorder, 0, size, size); }private: TreeNode* getTree(vector<int> &inorder, vector<int> &postorder, int start, int end, int &last) { if(start > end) return NULL; int i = 0; for(i = start; i <= end; i++) { if(inorder[i] == postorder[last]) { i++; break; } } i--; TreeNode* root = new TreeNode(postorder[last]); last--; root->right = getTree(inorder, postorder, i+1, end, last); root->left = getTree(inorder, postorder, start, i-1, last); return root; }};
Round 2:
class Solution {public: TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { return dfs(0, inorder.size()-1, 0, postorder.size()-1, inorder, postorder); }private: TreeNode *dfs(int si, int ei, int sp, int ep, vector<int> &inorder, vector<int> &postorder) { if(si > ei || sp > ep) return NULL; TreeNode *node = new TreeNode(postorder[ep]); int mid = 0; for(int i = si; i <= ei; i++) { if(inorder[i] == postorder[ep]) { mid = i; break; } } int leftcount = mid - si; int rightcount = ei - mid; TreeNode *left = dfs(si, mid-1, sp, sp+leftcount-1, inorder, postorder); TreeNode *right = dfs(mid+1, ei, ep-rightcount, ep-1, inorder, postorder); node->left = left; node->right = right; return node; }};
0 0
- *(leetcode) Construct Binary Tree from Inorder and Postorder Traversal (tree)
- LeetCode[Tree]: Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode]Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode] Construct Binary Tree from Inorder and Postorder Traversal
- leetcode 110: Construct Binary Tree from Inorder and Postorder Traversal
- 【leetcode】Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode]Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode-Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode] Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode - Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal
- Linux下C与Mysql的混合编程
- 游戏服务器设计的一些感悟
- 非常有用的 Markdown 编辑器和工具
- C++单例
- 容易混淆的四个php函数strstr strrchr substr stristr
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- HTTP Content-type 与 AFNetworking--Mark过来备用
- AsyncTask和Handler的优缺点比较
- 探索Oracle之 EXP/IMP过程中的字符集问题
- php实现url伪静态化,全过程详解
- C#遍历DataSet中数据的几种方法总结
- php curl常用的5个例子
- HDU 3966 Aragorn's Story(树链剖分)
- javascript 实现图片预览(未上传到服务器端)