-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path105.cpp
35 lines (35 loc) · 1.07 KB
/
105.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int ins=0;
int ine=inorder.size()-1;
int pres=0;
int pree=preorder.size()-1;
return buildTree(preorder,inorder,ins,ine,pres,pree);
}
TreeNode * buildTree(vector<int>preorder,vector<int>inorder,int ins,int ine,int pres,int pree){
if(ins>ine){
return NULL;
}
int rootdata =preorder[pres];
int rootindex=-1;
for(int i=0;i<preorder.size();i++){
if( inorder[i]==rootdata){
rootindex=i;
break;
}
}
int lins=ins;
int rins=rootindex+1;
int line=rootindex-1;
int rine=ine;
int lpres=pres+1;
int lpree=line-lins+lpres;
int rpres=lpree+1;
int rpree=pree;
TreeNode * node=new TreeNode(rootdata);
node->left=buildTree(preorder,inorder,lins,line,lpres,lpree);
node->right=buildTree(preorder,inorder,rins,rine,rpres,rpree);
return node;
}
};