Construct Binary Tree from Preorder and Inorder Traversal
Last updated
Last updated
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
unordered_map<int, int> hash;
for (int i = 0; i < inorder.size(); ++i) {
int val = inorder[i];
hash[val] = i;
}
return buildTree(
preorder, 0, preorder.size(),
inorder, 0, inorder.size(),
hash);
}
TreeNode *buildTree(
vector<int> &preorder, int l1, int r1,
vector<int> &inorder, int l2, int r2, unordered_map<int, int> &hash) {
if (l1 >= r1)
return nullptr;
int rootVal = preorder[l1];
int rootIdx = hash[rootVal];
TreeNode *root = new TreeNode(rootVal);
int leftLen = rootIdx - l2;
root->left = buildTree(
preorder, l1 + 1, l1 + 1 + leftLen,
inorder, l2, rootIdx,
hash);
root->right = buildTree(
preorder, l1 + 1 + leftLen, r1,
inorder, rootIdx + 1, r2,
hash);
return root;
}
};