leetcode-105-Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:

  • You may assume that duplicates do not exist in the tree.

For example, given

1
2
3
4
5
6
7
8
9
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
Return the following binary tree:

3
/ \
9 20
/ \
15 7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
private:
TreeNode* buildTree(const vector<int>& preorder, int p_l, int p_h, const vector<int>& inorder, int i_l, int i_h)
{
if(i_l > i_h) return NULL;
int val = preorder[p_l];
TreeNode *root = new TreeNode(val);
int i = i_l;
for(; i <= i_h; i++)
if(inorder[i] == val) break;
root->left = buildTree(preorder, p_l+1, p_l+i-i_l, inorder, i_l, i-1);
root->right = buildTree(preorder, p_l+i-i_l+1, p_h, inorder, i+1, i_h);
return root;
}
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return buildTree(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1);
}
};
Donate? comment?