典型的递归的思路,可以用HashMap进一步优化。
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return help(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1);
}
TreeNode* help(vector<int>& preorder, int preStart, int preEnd,vector<int>& inorder, int inStart, int inEnd){
if(preStart>preEnd) return NULL;
int indexRoot = inStart;
while(indexRoot<=inEnd&&inorder[indexRoot]!=preorder[preStart]) indexRoot++;
TreeNode* root = new TreeNode(inorder[indexRoot]);
root->left = help(preorder,preStart+1,preStart+indexRoot-inStart,inorder,inStart,indexRoot-1);
root->right = help(preorder,preStart+indexRoot+1-inStart,preEnd,inorder,indexRoot+1,inEnd);
return root;
}
};