题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
输入
输入一个长度小于50个字符的字符串。
输出
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfacgefdba35
提示
#include<stdio.h>
#include<stdlib.h>
#define max 10000
char s[66];
int i=0,count;
struct node
{
char data;
struct node *l;
struct node *r;
};
struct node *create(struct node *t)
{
if(s[i]==',')
{
t=NULL;
i++;
}
else
{
t=(struct node *)malloc(sizeof(struct node));
t->data=s[i];
i++;
t->l=create(t->l);
t->r=create(t->r);
}
return t;
};
void inpop(struct node *t)
{
if(t!=NULL)
{
inpop(t->l);
printf("%c",t->data);
inpop(t->r);
}
}
void rearpop(struct node *t)
{
if(t!=NULL)
{
rearpop(t->l);
rearpop(t->r);
printf("%c",t->data);
}
}
void countleaf(struct node *t)
{
if(t)
{
if((!t->l)&&(!t->r))
count++;
countleaf(t->l);
countleaf(t->r);
}
}
int depth(struct node *t)
{
int ldepth=0,rdepth=0;
if(!t)
return 0;
else
{
ldepth=depth(t->l);
rdepth=depth(t->r);
if(ldepth>rdepth)
return ldepth+1;
else
return rdepth+1;
}
}
int main()
{
struct node *t;
int n;
count=0;
gets(s);
t=create(t);
inpop(t);
printf("\n");
rearpop(t);
printf("\n");
countleaf(t);
printf("%d\n",count);
n=depth(t);
printf("%d\n",n);
return 0;
}