数据结构实验之二叉树的建立与遍历
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
Input
输入一个长度小于50个字符的字符串。
Output
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfacgefdba35
Hint
Author
ma6174
#include<stdio.h>
char a[100];
int i,cou;
typedef struct tree
{
char data;
struct tree * l, * r;
}tree;
tree * creat(tree * p)
{
char c;
c=a[i++];
if(c!=',')
{
p=new tree;
p->data=c;
p->l=creat(p->l);
p->r=creat(p->r);
}
else
p=NULL;
return p;
}
void intravel(tree * p)
{
if(p)
{
intravel(p->l);
printf("%c",p->data);
intravel(p->r);
}
}
void lasttravel(tree * p)
{
if(p)
{
if(p->l==NULL&&p->r==NULL)
cou++;
lasttravel(p->l);
lasttravel(p->r);
printf("%c",p->data);
}
}
int deep(tree * p)
{
int d=0, dl,dr;
if(p)
{
dl=deep(p->l);
dr=deep(p->r);
d=dr>dl? dr+1:dl+1;
}
return d;
}
int main()
{
tree * p;
while(scanf("%s",a)!=EOF)
{
i=0;
cou=0;
p=creat(p);
intravel(p);
printf("\n");
lasttravel(p);
printf("\n");
printf("%d\n%d\n",cou,deep(p));
}
return 0;
}