基础课复习日志
作者:
睡觉大魔王
,
2023-04-16 11:01:36
,
所有人可见
,
阅读 179
重建二叉树
以后这就是我的模板了()
class Solution {
public:
TreeNode* buildTree(vector<int>&preorder, vector<int>&inorder) {
TreeNode* root=new TreeNode(0);
if(preorder.size()==0) return NULL;
dfs(preorder,inorder,root);
return root;
}
void dfs(vector<int>A,vector<int>B,TreeNode* root){
if(A.size()==0) return ;
int num=A[0];
root->val=A[0];
vector<int>a_lt,a_rt;
vector<int>b_lt,b_rt;
int flag=0;
for(int i=0;i<A.size();i++)
{
if(B[i]==num)
{
flag=1;
continue;
}
if(flag) b_rt.push_back(B[i]);
else b_lt.push_back(B[i]);
}
for(int i=1;i<A.size();i++)
{
if(i<=b_lt.size()) a_lt.push_back(A[i]);
else a_rt.push_back(A[i]);
}
if(a_lt.size()>0)
{
root->left=new TreeNode(0);
dfs(a_lt,b_lt,root->left);
}
if(a_rt.size()>0)
{
root->right=new TreeNode(0);
dfs(a_rt,b_rt,root->right);
}
}
};