#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct tnode
{
char data;
tnode *lc,*rc;
}*tree;
void build(tree &t,char *he,char *mid,int len) //数组用字符来代替
{
if(len==0) t=NULL; //递归停止条件
else
{
int k=0;
int n=strlen(mid);
for(;k<n;k++) //寻找根节点
{
if(mid[k]==*he)
break;
}
t=new(tnode);
t->data=*he;
build(t->lc,he+1,mid,k); //t->lc; 递归左子树
build(t->rc,he+k+1,mid+k+1,len-(k+1)); //t->rc; 递归右子树
}
}
void last(tree &t) //后序遍历
{
if(t)
{
last(t->lc);
last(t->rc);
printf("%c",t->data);
}
}
void ceng(tree &t) //层序遍历
{
tnode *p[1000];
int rear=0,front=0;
if(t)
p[rear++]=t;
while(rear>front)
{
t=p[front++];
printf("%c",t->data);
if(t->lc) p[rear++]=t->lc;
if(t->rc) p[rear++]=t->rc;
}
}
int main()
{
int n;
char he[55],mid[55];
tree t;
scanf("%d",&n);
while(n--)
{
scanf("%s %s",he,mid);
int len=strlen(he);
build(t,he,mid,len);
last(t);
printf("\n");
ceng(t);
printf("\n");
}
return 0;
}
数据结构实验之求二叉树后序遍历和层次遍历(简单版)
最新推荐文章于 2022-10-31 13:41:42 发布