1,二叉树的存储结构:
typedef struct Node
{
char data;
struct Node *lchild,*rchild;
}Node,*BiTree;
2, 建立二叉树:
BiTree CreateBitree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=(BiTree)malloc(sizeof(Node));
if(!T) exit(-2);
T->data=ch;
CreateBitree(T->lchild);
CreateBitree(T->rchild);
return T;
}
}
3, 求二叉树的高度:
void high(BiTree T,int &height)
{
if(T==NULL) height=0; //注意点
else
{
int left_h;
high(T->lchild,left_h);
int right_h;
high(T->rchild,right_h);
height=max(left_h,right_h)+1;
}
}
4, 二叉树的叶子节点数目:
void CountLeaf(BiTree T,int &num)
{
if(T!=NULL)
{
if(T->lchild==NULL&&T->rchild==NULL)
num++;
CountLeaf(T->lchild,num);
CountLeaf(T->rchild,num);
}
}
5,二叉树节点数:
int nodes(BiTree T)
{
if(T==NULL) return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else
return nodes(T->lchild)+nodes(T->rchild)+1;
}
6, 主函数
void Free(BiTree &T)
{
if(T==NULL) return ;
Free(T->lchild);
Free(T->rchild);
free(T);
T=NULL;
}
int main()
{
BiTree T=NULL;
CreateBitree(T);
int height;
int num=0;
high(T,height);
cout<<height<<endl;
CountLeaf(T,num);
cout<<num<<endl;
Free(T);
return 0;
}
数据: ABC##DE#G##F### 5 3