数据结构实验之二叉树的建立与遍历
Problem Description
已知一个按先序序列输入的字符序列,如abc,de,g,f,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
Input
输入一个长度小于50个字符的字符串。
Output
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
Sample Input
abc,de,g,f,
Sample Output
cbegdfa
cgefdba
3
5
代码:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char a[100];
int i=0;
struct node
{
char data;
struct node *l,*r;
}*root;
struct node *create() //建立二叉树
{
struct node *root;
if(a[i]==',')
{
i++;
return NULL;
}
else
{
root=(struct node*)malloc(sizeof(struct node));
root->data=a[i++];
root->l=create();
root->r=create();
}
return root;
};
void hou(struct node *root) //后序遍历
{
if(root)
{
hou(root->l);
hou(root->r);
printf("%c",root->data);
}
}
int s=0;
void mi(struct node *root) //中序遍历
{
if(root)
{
mi(root->l);
printf("%c",root->data);
mi(root->r);
}
}
int yezi(struct node *root) //叶子节点个数
{
if(root)
{
yezi(root->l);
yezi(root->r);
if(root->l==NULL&&root->r==NULL)s++;
}
return s;
}
int shen(struct node *root) //二叉树深度
{
int a1,a2,he;
if(root==NULL)return 0;
else
{
a1=shen(root->l);
a2=shen(root->r);
if(a1>a2)he=a1+1;
else he=a2+1;
}
return he;
}
int main()
{
scanf("%s",a); //不要忘了每一次输出都有换行
root=create();
mi(root);
printf("\n");
hou(root);
printf("\n");
printf("%d\n",yezi(root));
printf("%d\n",shen(root));
return 0;
}