C語言程式設計:如何計算二叉樹葉子結點數目?

我們都知道,一個二叉樹,如果每一個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,如果一個二叉樹的層數為K,且結點總數是(2^k) -1 ,則它就是滿二叉樹。

C語言程式設計:如何計算二叉樹葉子結點數目?

節點:

就是一個圖中的0、1、2~~15,這些就叫節點。

葉子節點:

就是沒有子節點的節點,比如圖中的8、9~~15這些。

接下來,我們直接用程式碼看一下怎麼計算二叉樹葉子結點數目(C語言):

#include#includeint depth;typedef struct Node{char data;struct Node *Lchild;struct Node *Rchild;}BiTNode,*Bitree;void CreateBinTree(BiTNode **T){char ch;ch=getchar();if(ch==‘#’){ *T=NULL;return;}*T=(BiTNode*)malloc(sizeof(BiTNode));(*T)->data=ch;CreateBinTree(&((*T)->Lchild));CreateBinTree(&((*T)->Rchild));}Bitree CreateBinTree2(){ BiTNode *T;char ch;ch=getchar();if(ch==‘#’){ return NULL;}T=(BiTNode*)malloc(sizeof(BiTNode));T->data=ch;T->Lchild= CreateBinTree2();T->Rchild= CreateBinTree2();}void PreTree(Bitree T){ if(T==NULL) return;printf(“%c ”,T->data);PreTree(T->Lchild);PreTree(T->Rchild);}int PostTreeDepth(BiTNode *T)//求樹的深度(後序遍歷){int hl,hr,max;if(T!=NULL){hl=PostTreeDepth(T->Lchild);hr=PostTreeDepth(T->Rchild);max=hl>hr?hl:hr;return (max+1);}else return 0;}void PreTreeDepth(BiTNode *T,int h)//求樹的深度(先序遍歷)depth為全域性變數{if(T!=NULL){if(h>depth) depth=h;PreTreeDepth(T->Lchild,h+1);PreTreeDepth(T->Rchild,h+1);}}int PreOrderNUM(Bitree T)//遞迴就好了{ int nleft =0,nright = 0;if(T==NULL) return 0;if(T->Lchild==NULL&&T->Rchild==NULL) return 1;if (T->Lchild){nleft = PreOrderNUM(T->Lchild);}if (T->Rchild){nright = PreOrderNUM(T->Rchild);}return nleft+nright;}int main(){BiTNode *T=(BiTNode*)malloc(sizeof(BiTNode));T = CreateBinTree2();//PreTree(T);//printf(“%d”,PostTreeDepth(T));printf(“%d”,PreOrderNUM(T));return 0;}

作者:MCL

不懂就問,

對於準備學習程式設計的小夥伴,如果你想更好的提升你的程式設計核心能力(內功)不妨從現在開始!

程式設計學習書籍分享:

C語言程式設計:如何計算二叉樹葉子結點數目?

程式設計學習影片分享:

C語言程式設計:如何計算二叉樹葉子結點數目?

整理分享(多年學習的原始碼、專案實戰影片、專案筆記,基礎入門教程)

歡迎轉行和學習程式設計的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

對於C/C++感興趣可以關注小編在後臺私信我:【程式設計交流】一起來學習哦!

可以領取一些C/C++的專案學習影片資料哦!已經設定好了關鍵詞自動回覆,自動領取就好了!