Input
Output
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
Sample Input
abc,,de,g,,f,,,
Sample Output
cbegdfacgefdba35
#include <stdio.h>
#include <stdlib.h>
int numleaf=0;
int numdepth;
struct node
{
char data;
struct node *l,*r;
};
struct node *build(struct node *root)
{
char a;
a=getchar();
if(a==',')
{
root=NULL;
}
else
{
root=(struct node*)malloc(sizeof(struct node));
root->data=a;
//printf("%c",root->data);
root->l=build(root->l);
root->r=build(root->r);
}
return root;
}
void mid(struct node *root)
{
if(root!=NULL)
// return root;
{
mid(root->l);
printf("%c",root->data);
mid(root->r);
}
}
void last(struct node *root)
{
if(root!=NULL)
// return root;
{
last(root->l);
last(root->r);
printf("%c",root->data);
}
}
void leaf(struct node *t)
{
if(t!=NULL)
{
if((t->l==NULL)&&(t->r==NULL))
{
numleaf++;
// printf("%d ",numleaf);
return ;
}
else
{
leaf(t->l);
leaf(t->r);
}
}
}
int depth(struct node *t)
{
int ldepth,rdepth;
if(t==NULL)
numdepth=0;
else
{
ldepth=depth(t->l);
rdepth=depth(t->r);
numdepth=1+(ldepth>rdepth?ldepth:rdepth);
}
return numdepth;
}
int main()
{
struct node *root;
root=build(root);
mid(root);
printf("\n");
last(root);
printf("\n");
leaf(root);
printf("%d\n",numleaf);
numdepth=depth(root);
printf("%d\n",numdepth);
return 0;
}