根据前序、中序序列构建一棵二叉树
优质
小牛编辑
114浏览
2023-12-01
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
int lengthpre=pre.size();
int lengthvin=vin.size();
if(lengthpre==0||lengthvin==0) return nullptr;
TreeNode *root=new TreeNode(pre[0]); //创建节点
//找到中序数组中的位置
int inposition=0;
for(int i=0;i<lengthvin;++i)
{
if(vin[i]==pre[0])
{
inposition=i;
break;
}
}
vector<int> preleft,preright,vinleft,vinright;
for(int i=0;i<inposition;i++)
{
vinleft.push_back(vin[i]);
preleft.push_back(pre[i+1]);
}
for(int i=inposition+1;i<lengthvin;++i)
{
vinright.push_back(vin[i]);
preright.push_back(pre[i]);
}
root->left=reConstructBinaryTree(preleft,vinleft);
root->right=reConstructBinaryTree(preright,vinright);
return root;
}