1. 程式人生 > >二叉樹節點數及葉子節點數

二叉樹節點數及葉子節點數

  繼續二叉樹系列的程式碼內容。今天寫的是求二叉樹節點個數及葉子節點個數的程式碼。採用了遞迴的方法求解。
程式碼如下:

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

構建的二叉樹如下圖:
在這裡插入圖片描述

執行結果如下圖:
在這裡插入圖片描述
  相對於第一天開始寫程式碼,現在自己對於資料結構的定義,二叉樹的建立已經很熟練了。現在寫程式碼無需參考書中的虛擬碼,自己直接就可以寫出來,雖然可能需要除錯多次才能得到正確的結果,但相對於一週前的自己,現在的自己已經有很大進步了。畢竟一年多沒有寫過程式碼,沒有看過相關的內容。雖然荒廢了很多,但是我覺得撿起來是很快的,加油!