统计二叉树的结点个数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node{ //二叉树的链式存储结点
char data;
struct Node *Lchild;
struct Node *Rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *root){ //形参采用二级指针,实参为结点孩子域地址
char ch;
ch=getchar();
if(ch=='#') *root=NULL;
else{
*root=(BiTree)malloc(sizeof(BiTree));
(*root)->data=ch;
CreateBiTree(&((*root)->Lchild));
CreateBiTree(&((*root)->Rchild));
}
}
void Visit(char data){
printf("%c",data);
}
int zero=0,one=0,two=0;
void Statistics(BiTree T){ //统计二叉树中的结点数
if(T){
if(T->Lchild!=NULL&&T->Rchild!=NULL) two++;
else if(T->Lchild==NULL&&T->Rchild==NULL) zero++;
else one++;
Statistics(T->Lchild);
Statistics(T->Rchild);
/*采用先序递归遍历的方法*/
}
}
void Printf_Leaf(BiTree T){ //输出所有叶子结点
if(T){
if(T->Lchild==NULL&&T->Rchild==NULL)
printf("%c",T->data);
Printf_Leaf(T->Lchild);
Printf_Leaf(T->Rchild);
}
/*采用先序递归遍历的方法*/
}
int main(){
BiTree T;
CreateBiTree(&T);
Statistics(T);
printf("%d %d %d\n",zero,one,two);
Printf_Leaf(T);
return 0;
}