已知一颗二叉树的前序和中序序列,唯一的确定一颗二叉树,由此构造二叉树的递归算法。
设前序序列和中序序列分别存放两个一维数组,pre(1,n)和ind(1,n),按前序序列pre(i,j)和中序序列ind(u,v)递归构造二叉树,其根结点指针为s。
typedef struct bnode
{ Elemtype data;
struct bnode *left,*right;
}btree;
btree *bintree(int i,int j,int u,int v)
{
int k,l;
btree *head,*s;
head=NULL;
if(j>=i)
{
head=new btree; //建立根结点
head->data=pre[i];
k=u;
while(ind[k]!=pre[i]) k++//在中序序列中查找根结点
l=i+k-u;//l为左子树中最右下结点在前序序列中的位置
if(k==u) //左子树为空
head->left=NULL;
else
{
s=bintree(i+1,l,u,k-1);//构造左子树
head->left=s;
}
if(k==v)//右子树为空
head->right=NULL;
else
{
s=bintree(l+1,j,k+1,v);//构造右子树
head->right=s;
}
}
return head;
}