105. Construct Binary Tree from Preorder and Inorder Traversal
class Solution {
public:
typedef vector<int>::iterator iter;
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// write your code here
if(preorder.empty() || inorder.empty()){
return NULL;
}
return getroot(preorder.begin(), preorder.end(), inorder.begin(), inorder.end());
}
//得到根节点
TreeNode *getroot(iter ps, iter pe, iter is, iter ie){
if(ps == pe){
return NULL;
}
TreeNode *root = new TreeNode(*ps);
iter iterroot;
iterroot = find(is, ie, root->val);
root->left = getroot(ps+1, ps+1+(iterroot-is), is, iterroot);
root->right = getroot(ps+1+(iterroot-is), pe, iterroot+1, ie);
return root;
}
};