[LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal
2017-07-03 17:07
351 查看
Given inorder and postorder traversal of a tree, construct the binary tree.
![](https://img-blog.csdn.net/20170703170708010?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FpX2o=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170703170717139?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FpX2o=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170703171239571?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FpX2o=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { return buildTree(inorder.begin(), inorder.end(), postorder.begin(), postorder.end()); } private: TreeNode* buildTree(vector<int>::iterator inbegin, vector<int>::iterator inend, vector<int>::iterator postbegin, vector<int>::iterator postend) { if (postbegin >= postend) return nullptr; postend--; int rootval = *postend; TreeNode *root = new TreeNode(rootval); auto mid = find(inbegin, inend, rootval); const int nleft = mid - inbegin; root->left = buildTree(inbegin, mid, postbegin, postbegin + nleft); root->right = buildTree(mid + 1, inend, postbegin + nleft, postend); return root; } };
// 使用hash优化了上面的find操作 class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { unordered_map<int, vector<int>::iterator> loc; for (auto it = inorder.begin(); it != inorder.end(); it++) loc[*it] = it; return buildTree(loc, inorder.begin(), inorder.end(), postorder.begin(), postorder.end()); } private: TreeNode* buildTree(unordered_map<int, vector<int>::iterator> &loc, vector<int>::iterator inbegin, vector<int>::iterator inend, vector<int>::iterator postbegin, vector<int>::iterator postend) { if (postbegin >= postend) return nullptr; postend--; int rootval = *postend; TreeNode *root = new TreeNode(rootval); auto mid = loc[rootval]; const int nleft = mid - inbegin; root->left = buildTree(loc, inbegin, mid, postbegin, postbegin + nleft); root->right = buildTree(loc, mid + 1, inend, postbegin + nleft, postend); return root; } };
相关文章推荐
- [Leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode --- 106. Construct Binary Tree from Inorder and Postorder Traversal
- Java for 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 105/106 Construct Binary Tree from Preorder/Postorder and Inorder Traversal
- LeetCode 106:Construct Binary Tree from Postorder and Inorder Traversal
- [Leetcode 106, Medium] 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 | 根据中序和后序遍历构建二叉树 | Medium
- [Leetcode 79] 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: Construct Binary Tree from Inorder and Postorder Traversal [106]
- [LeetCode]106 Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode 106: Construct Binary Tree from Inorder and Postorder Traversal