二、計算二叉樹高度
二叉樹結構體如下:
// 二叉樹結構體
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...