資料結構 計算節點個數和二叉樹高度(C語言版)

2021-10-11 22:50:36 字數 2226 閱讀 5880

二、計算二叉樹高度

二叉樹結構體如下:

//	二叉樹結構體 

typedef

struct treelinkt_link,

*tlink;

讓根節點指標開始,進行二叉樹的遍歷,遍歷樹節點中不為null下,及存在節點,遍歷次數相加之和 + 根節點 及為總節點

//	計算二叉樹總節點

intcalc_alljiedian

(tlink p)

return1+

calc_alljiedian

(p->lchild)

+calc_alljiedian

(p->rchild)

;// 遍歷該節點的左右子樹,再加上根節點

}

遍歷二叉樹途中,只記錄遍歷樹節點中遇到(左邊子樹存在,右邊子樹為null )或者 (右邊子樹存在,左邊子樹為null)這種節點,才讓遞迴 返回值 +1,依次累加

//	計算單分支節點 

intsignal_node

(tlink p)

elseif(

(p->lchild==

null

&&p->rchild!=

null)||

(p->lchild!=

null

&&p->rchild==

null))

else

}

計算雙分支節點思路 和 計算單支點相反 為: 遍歷 二叉樹 只記錄 節點指標指向的節點中 左右子樹都存在 的時候,遞迴返回值+1,累加最後返回 就是雙分支節點的個數

//	計算雙分支節點

intcalc_doublenode

(tlink p)

else

if(p->lchild!=

null

&&p->rchild!=

null

)else

}

總**:

#include

#include

// 二叉樹結構體

typedef

struct treelinkt_link,

*tlink;

// 建立二叉樹

tlink create_treelink()

else

}// 計算二叉樹總節點

intcalc_alljiedian

(tlink p)

return1+

calc_alljiedian

(p->lchild)

+calc_alljiedian

(p->rchild)

;// 遍歷該節點的左右子樹,再加上根節點

}// 計算雙分支節點

intcalc_doublenode

(tlink p)

else

if(p->lchild!=

null

&&p->rchild!=

null

)else

}// 計算單分支節點

intsignal_node

(tlink p)

elseif(

(p->lchild==

null

&&p->rchild!=

null)||

(p->lchild!=

null

&&p->rchild==

null))

else

}int

main()

執行結果:

思路 :

遞迴遍歷二叉樹,除去根節點下,比較節點左右子樹的遍歷次數大小,最後大的結果 加上 根節點 1 ,就是二叉樹的高度

//	計算二叉樹的高度

intcalc_hight

(tlink p)

else

}

二叉樹 高度,寬度和節點個數

對於二叉樹的演算法問題,我們可以根據二叉樹本身的定義的遞迴性質求解,或者使用對二叉樹的遍歷演算法進行求解.下面我們看幾個關於二叉樹高度,寬度和節點個數的演算法 一,求二叉樹的高度 1,使用二叉樹遞迴定義的性質求二叉樹的高度 如果根節點為空,返回0 否則 遞迴求左子樹高度 getheightrecur...

完全二叉樹子節點個數

題目 乙個具有n個節點的完全二叉樹,其葉子節點的個數為多少?分析 設葉子節點個數為n0,度為1的節點個數為n1,度為2的節點個數為n2 側有 n0 n1 n2 n 1 對於二叉樹有 n0 n2 1 2 由 1 2 n0 n 1 n1 2 3 由完全二叉樹的性質可知 n1 0 或 1總結 a 當n1 ...

完全二叉樹的節點個數

給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 1 2 3 4 5 6 輸出 6 defini...