Construct Binary Tree from Preorder and Inorder Traversal
Problem
Given two integer arrays preorder
and inorder
where preorder
is the preorder traversal of a binary tree and inorder
is the inorder traversal of the same tree, construct and return the binary tree.
Solution Approach
Expected Time complexity:
Click - to see solution code
- C++
class Solution {
vector<int> preorder;
vector<int> inorder;
public:
TreeNode* createTree(int p1, int p2, int n1, int n2) {
if (p2 < p1 || n1 > n2) return NULL;
TreeNode* root = new TreeNode(preorder[p1]);
if (p1 == p2 || n1 == n2) return root;
int pp1, pp2, nn1, nn2;
nn1 = n1, nn2 = n1;
while (inorder[nn2] != preorder[p1]) {
nn2++;
}
nn2--;
pp1 = p1 + 1;
pp2 = p1 + (nn2 - nn1) + 1;
root->left = createTree(pp1, pp2, nn1, nn2);
nn2 = n2;
nn1 = n2;
while (inorder[nn1] != preorder[p1]) nn1--;
nn1++;
pp2 = p2;
pp1 = pp2 - (nn2 - nn1);
root->right = createTree(pp1, pp2, nn1, nn2);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
this->preorder = preorder;
this->inorder = inorder;
int n = preorder.size();
return createTree(0, n - 1, 0, n - 1);
}
};