具体思路:
递归分治;
具体代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void fun(int lpre,int rpre,int lin,int rin,vector<int>& pre,vector<int>& in,TreeNode* &root){
if(lin>rin)
return;
if(lin==rin){
root=new TreeNode(in[lin]);
return;
}
int mid=-1;
for(int i=lin;i<=rin;i++){
if(in[i]==pre[lpre]){
mid=i;
break;
}
}
root=new TreeNode(in[mid]);
int left=mid-lin;
int right=rin-mid;
if(mid>lin){
fun(lpre+1,lpre+left,lin,mid-1,pre,in,root->left);
}
if(mid<rin){
fun(lpre+left+1,lpre+left+right,mid+1,rin,pre,in,root->right);
}
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode* root=NULL;
fun(0,inorder.size()-1,0,preorder.size()-1,preorder,inorder,root);
return root;
}
};