/*
Description:对任意建立的一颗二叉树求其结点数和叶数
*/
#include<stdio.h>
#include<stdlib.h>
#define null 0
typedef struct btnode//二叉树结点
{
char date;
struct btnode *lc,*rc;
}btnode;
btnode *t; //定义二叉树结点类型指针
btnode *creattree()//创建二叉树并将而二叉树的跟结点指针返回
{
//getchar();
btnode *p;
char ch;
if((ch=getchar())=='#')//没有结点的用#表示
p=null;
else
{
p=(btnode*)malloc(sizeof(btnode));
p->date=ch;
p->lc=creattree();
p->rc=creattree();
}
return(p);
}
int nodes(btnode *p)//统计p指向的树的结点总数
{
int node=0;
if(p==null)
node=0;
else
node=1+nodes(p->lc)+nodes(p->rc);
return (node);
}
int num=0;//叶子计数器
int leafs(btnode *p)//统计p指向的
{
if(p)
{
leafs(p->lc);
if(!(p->lc||p->rc))
num++;
leafs(p->rc);
}
return (num);
}
int main()
{
btnode *s;
int nodenum,leafnum;
//s=null;
printf("请输入结点:");
s=creattree();
nodenum=nodes(s);
printf("%d/n",nodenum);
leafnum=leafs(s);
printf("%d/n",leafnum);
system("pause");
}