#include <stdio.h>
#include <stdlib.h>
typedef struct Bitnode //定义二叉树
{
char data;
struct Bitnode *lchild,*rchild;
}Bitnode,*Bitree;
void createBitree(Bitree &T) //创建二叉树
{
char ch;
ch=getchar();
if(ch==' ') T=NULL;
else
{
T=(Bitree)malloc(sizeof(Bitnode));
T->data=ch;
createBitree(T->lchild);
createBitree(T->rchild);
}
}
int high(Bitree T) //求二叉树高度函数
{
int h,h1,h2;
if(!T) h=0;
else if(!T->lchild&&!T->rchild) h=1;
else
{
h1=high(T->lchild);
h2=high(T->rchild);
h=(h1>h2?h1:h2)+1;
}
return h;
}
int leaf(Bitree T) //求叶子结点个数函数
{
int l,lc,rc;
if(!T) l=0;
else if(!T->lchild&&!T->rchild) l=1;
else
{
lc=leaf(T->lchild);
rc=leaf(T->rchild);
l=lc+rc;
}
return l;
}
int all(Bitree T) //求总结点函数
{
int n,nl,nr;
if(!T) n=0;
else if(!T->lchild&&!T->rchild) n=1;
else
{
nl=all(T->lchild);
nr=all(T->rchild);
n=nl+nr+1;
}
return n;
}
void main() //主函数
{
int a,b,c;
Bitree T;
printf("请输入二叉树:\n");
createBitree(T);
a=high(T);
printf("二叉树的高度为%d:\n",a);
b=leaf(T);
printf("二叉树的叶子节点为%d:\n",b);
c=all(T);
printf("二叉树的总节点为%d:\n",c);
}