输入一棵二叉树的前序遍历序列和中序遍历序列,重建二叉树,返回二叉树的根结点。
采用递归的思想,前序遍历的第一个节点是二叉树的根节点,在中序遍历中找到根节点左边的是左子树,右边的是右子树。
struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
int len=pre.size();
if(len==0)
return NULL;
int index;
int a;
vector<int>prel;
vector<int>inl;
vector<int>prer;
vector<int>inr;
TreeNode*head=new TreeNode(pre[0]);
a=pre[0];
for(int i=0;i<len;i++)
{
if(in[i]==a)
{
index=i;
break;
}
}
for(int j=1;j<index+1;j++)
{
prel.push_back(pre[j]);
inl.push_back(in[j-1]);
}
for(int h=index+1;h<len;h++)
{
prer.push_back(pre[h]);
inr.push_back(in[h]);
}
head->left=reConstructBinaryTree(prel,inl);
head->right=reConstructBinaryTree(prer,inr);
return head;
}