#include<stdio.h>
#include<stdlib.h>
struct tree
{
char data;
struct tree *l,*r;
};
struct tree *t,*p;
int count=0;
struct tree*creat(struct tree *t)/*创建二叉树-递归*/
{
char c;
c=getchar();
if(c==',')
t=NULL;
else
{
t=(struct tree*)malloc(sizeof(struct tree));
t->data=c;
t->l=creat(p);
t->r=creat(p);
}
return t;
}
void inorder(struct tree*t)//中序
{
if(t)
{
inorder(t->l);
printf("%c",t->data);
inorder(t->r);
}
}
void postorder(struct tree*t)//后序
{
if(t)
{
postorder(t->l);
postorder(t->r);
printf("%c",t->data);
}
}
void leaf(struct tree *t)//树的叶子数
{
if(t)
{
if((t->l==NULL)&&(t->r==NULL))
count++;
leaf(t->l);
leaf(t->r);
}
}
int deep(struct tree *t)//树的深度
{
int lchild,rchild;
if(!t)
return 0;
lchild=deep(t->l);
rchild=deep(t->r);
return lchild>rchild?lchild+1:rchild+1;
}
int main()
{
struct tree *s;
s=creat(t);
inorder(s);
printf("\n");
postorder(s);
printf("\n");
leaf(s);
printf("%d\n",count);
printf("%d\n",deep(s));
return 0;
}
树的创建与遍历 叶子数 与深度
最新推荐文章于 2022-10-15 13:43:51 发布