1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
auto dfs=[&](auto&& self,vector<int>pre,vector<int>in)->TreeNode* {
if(pre.empty()) return nullptr;
TreeNode* root=new TreeNode(pre[0]);
int mid=find(in.begin(),in.end(),pre[0])-in.begin();
root->left=self(self,
vector(pre.begin()+1,pre.begin()+1+mid),
vector(in.begin(), in.begin()+mid)
);
root->right=self(self,
vector(pre.begin()+1+mid,pre.end()),
vector(in.begin()+1+mid,in.end())
);
return root;
};
return dfs(dfs,preorder,inorder);
}
};
|