数据结构——统计二叉树的结点个数

统计二叉树的结点个数

#include
#include
#include

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;
} 

你可能感兴趣的:(数据结构——统计二叉树的结点个数)