1. 程式人生 > >資料結構——統計二叉樹的結點個數

資料結構——統計二叉樹的結點個數

統計二叉樹的結點個數

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