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
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
Return the following binary tree:
3
/
9 20
/
15 7

1 class Solution { 2 public: 3 int p1; 4 TreeNode*buildchild(vector<int>& preorder, vector<int>& inorder, int i1, int i2) { 5 if (i2 < i1) 6 return NULL; 7 int nowroot = preorder[p1]; 8 TreeNode*ans = new TreeNode(nowroot); 9 for (int i = i1; i <= i2; i++) 10 if (inorder[i] == nowroot) { 11 if (i != i1) { 12 ++p1; 13 ans->left = buildchild(preorder, inorder, i1, i - 1); 14 } 15 if (i != i2) { 16 ++p1; 17 ans->right = buildchild(preorder, inorder, i + 1, i2); 18 } 19 } 20 return ans; 21 } 22 TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { 23 p1 = 0; 24 return buildchild(preorder, inorder, 0, inorder.size() - 1); 25 } 26 };