二叉樹節點數及葉子節點數
阿新 • • 發佈:2019-01-08
繼續二叉樹系列的程式碼內容。今天寫的是求二叉樹節點個數及葉子節點個數的程式碼。採用了遞迴的方法求解。
程式碼如下:
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
typedef struct BiTNode
{
char data;//樹中節點的資料
struct BiTNode *lchild,*rchild;//節點的左孩子指標和右孩子指標
}BiTNode,*BiTree;//二叉樹節點
//建立樹
void CreateBiTree(BiTree &T)
{
char ch;
scanf("%c" ,&ch);
if(ch == '#')
{
T = NULL;
return;
}
T = (BiTNode*)malloc(sizeof(BiTNode));
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
//計算樹中的葉子節點數
int LeafCount(BiTree T)
{
if(NULL == T)
{
return 0;
}
else
{
if(NULL == T->lchild && NULL == T-> rchild)
{
return 1;
}
else
{
return LeafCount(T->lchild) + LeafCount(T->rchild);
}
}
}
//樹的節點個數
int Nodes(BiTree T)
{
if(NULL == T)
return 0;
else
{
if(NULL == T->lchild && NULL == T->rchild)
return 1;
else
{
return Nodes(T->lchild) + Nodes(T-> rchild) + 1;
}
}
}
int main(int argc, char* argv[])
{
BiTree T = NULL;
CreateBiTree(T);
int leaf = LeafCount(T);
printf("BiTree leaf num is %d\n",leaf);
int nodes = Nodes(T);
printf("BiTree nodes is %d\n",nodes);
return 0;
}
構建的二叉樹如下圖:
執行結果如下圖:
相對於第一天開始寫程式碼,現在自己對於資料結構的定義,二叉樹的建立已經很熟練了。現在寫程式碼無需參考書中的虛擬碼,自己直接就可以寫出來,雖然可能需要除錯多次才能得到正確的結果,但相對於一週前的自己,現在的自己已經有很大進步了。畢竟一年多沒有寫過程式碼,沒有看過相關的內容。雖然荒廢了很多,但是我覺得撿起來是很快的,加油!