106. Construct Binary Tree from Inorder and Postorder Traversal
来源:互联网 发布:淘宝加盟诈骗案进展 编辑:程序博客网 时间:2024/06/05 09:29
Given inorder and postorder traversal of a tree, construct the binary tree.
注意左子树在后序中的根的位置为:root - (end - pos + 1), 根的位置-右子树的个数
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* dfs(int root, int start, int end, vector<int>& inorder, vector<int>& postorder, TreeNode* node) { if(start == end){ if(root < 0 || root >= inorder.size()) return NULL; else { node = new TreeNode(inorder[start]); if(node == NULL) return NULL; } } else if(start > end) return NULL; else { int pos = start; while(pos < end && inorder[pos] != postorder[root]) ++pos; if(node == NULL){ node = new TreeNode(inorder[pos]); if(node == NULL) return NULL; } node->left = dfs(root - (end - pos + 1), start, pos - 1, inorder, postorder, node->left); node->right = dfs(root - 1, pos + 1, end, inorder, postorder, node->right); } return node; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { TreeNode* bst = NULL; int sz = inorder.size(); if(sz == NULL) return bst; bst = dfs(sz - 1, 0, sz - 1, inorder, postorder, bst); return bst; }};
二刷:
和前序一样的思路,后序中左子树的范围:[postl, postl + pos - l - 1]。同理pos - l - 1是中序得到左子树的个数
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* dfs(vector<int>& inorder, vector<int>& postorder, int postl, int postr, int l, int r){ int pos; TreeNode* tree; if(l > r) return NULL; for(int i = 0; i <= r; ++i){ if(postorder[postr] == inorder[i]){ tree = new TreeNode(inorder[i]); pos = i; break; } } tree->left = dfs(inorder, postorder, postl, postl + (pos - l - 1), l, pos - 1); tree->right = dfs(inorder, postorder, postl + pos - l, postr - 1, pos + 1, r); return tree; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if(inorder.empty()) return NULL; return dfs(inorder, postorder, 0, postorder.size() - 1, 0, inorder.size() - 1); }};
0 0
- 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
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode#106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode *** 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- zookeeper自动化部署
- 209. Minimum Size Subarray Sum
- 使用Maven构建Java项目
- JavaScript函数赋值给变量
- Test
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- [Kafka]_0
- 一个关于回调的问题
- Cocos在android studio下的开发
- 传统MVP用在项目中是真的方便还是累赘?
- 动态规划Dynamic Programming的总结
- TCP/IP协议 之IPV4与IPV6的区别
- 建造者模式
- Android 利用Sensor现实了传感器