Skip to content

Commit 5265878

Browse files
committed
Added 106. Construct Binary Tree from Inorder and Postorder Traversal
1 parent 93dbefc commit 5265878

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

leetcode/cpp/Tree/106.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
private : unordered_map<int, int> mp;
3+
public:
4+
TreeNode* buildTree_util(vector<int>& inorder, int i1, int i2, vector<int>& postorder, int p1, int p2){
5+
if(i1 > i2 || p1 > p2)
6+
return NULL;
7+
TreeNode* root = new TreeNode(postorder[p2]);
8+
int diff = mp[postorder[p2]] - i1;
9+
root->left = buildTree_util(inorder, i1 , i1+diff-1, postorder, p1, p1+diff-1);
10+
root->right = buildTree_util(inorder, i1+diff+1, i2, postorder, p1+diff, p2-1);
11+
12+
return root;
13+
14+
15+
}
16+
17+
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
18+
int n = inorder.size();
19+
if(n == 0) return NULL;
20+
for(int i = 0; i < n; i++)
21+
mp[inorder[i]] = i; //(inorder, index)
22+
23+
return buildTree_util(inorder, 0, n-1, postorder, 0, n-1);
24+
}
25+
};

0 commit comments

Comments
 (0)