-
题目描述:
-
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。如果题目中所给的前序和中序遍历序列不能构成一棵二叉树,则输出”No”。
给出中序和前序我们可以用递归的方式重建二叉树
代码如下:
<span style="font-size:18px;">
BiNode *buildTree(int *pre,int *inorder,int n)//n表示个数
{
if(n==0)
return NULL;
BiNode * root=new BiNode;
int rdata=pre[0];
root->data=rdata;//前序的第一个是根节点
root->lchild=NULL;
root->rchild=NULL;
int i;
for(i=0;i<n;i++)
{
if(inorder[i]==rdata)//表示找到了根结点
break;
}
if(i==n)//表示没有找到。
{
f++;
return NULL;
}
//左子树个数为i个,右了子树个数是n-i-1;
if(i>0)
root->lchild=buildTree(pre+1,inorder,i);
if(n-1-i>0)
root->rchild=buildTree(pre+i+1,inorder+i+1,n-1-i);
return root;
}</span>