資料結構——統計二叉樹的結點個數
阿新 • • 發佈:2018-11-22
統計二叉樹的結點個數
#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; }