1.给定先序序列和中序列创建二叉树
struct stud *creat(char a[],char b[],int m)
{
char *p;
if(m==0)return NULL;
struct stud *root;
char w=a[0];
root=M;
root->date=w;
for(p=b;p;p++)
{
if(*p==w)
break;
}
int k=p-b;//纪录根节点左侧节点个数。
root->lchild=creat(a+1,b,k);
root->rchild=creat(a+k+1,p+1,m-k-1);
return root;
}
2.先序中序后序遍历
void qianxu(struct stud *root)
{
if(root)
{
printf("%c",root->date);
qianxu(root->lchild);
qianxu(root->rchild);
}
}
void zhongxu(struct stud *root)
{
if(root)
{
zhongxu(root->lchild);
printf("%c",root->date);
zhongxu(root->rchild);
}
}
void houxu(struct stud *root)
{
if(root)
{
houxu(root->lchild);
houxu(root->rchild);
printf("%c",root->date);
}
}
3.层序遍历
void cengxu(struct stud *root)
<span style="font-family: Arial, Helvetica, sans-serif;">{</span>
int head,tail;
struct stud *que[100];
head=0;
tail=0;
que[head++]=root;
while(head>tail)
{
if(que[tail])
{
printf("%c",que[tail]->date);
que[head++]=que[tail]->lchild;
que[head++]=que[tail]->rchild;
tail++;
}
else tail++;
}
}