數據結構 - 樹、二叉樹、完全二叉樹、真二叉樹、滿二叉樹

01-樹

節點的度:子樹的個數。
樹的度:所有節點度中的最大值。
葉子節點:度爲0的節點。
非葉子節點:度不爲0的節點。
層數:根節點在第一層,根節點的子節點在第二層,以此類推
節點的深度:從根節點到當前節點的唯一路徑上的節點總數。
節點的高度:從當前節點到最遠葉子節點的路徑上的節點總數。
樹的深度:所有節點深度中的最大值。
樹的高度:所有節點高度中的最大值。
樹的深度等於樹的高度。
有序樹:樹中任意節點的子節點之間有順序關係。

02-二叉樹及其性質

二叉樹:
每個節點的度最大爲2(最多擁有2棵子樹)
左子樹和右子樹是有順序的。
即使某節點只有一棵子樹,也要區分左右子樹。
非空二叉樹的第i層,最多有2^(i-1)個節點(i>=1)
在高度爲h的二叉樹上最多有2^h-1個節點(h>=1)

對於任何一棵非空二叉樹,如果葉子節點個數爲n0,度爲2的節點個數爲n2,則有:n0=n2+1
假設度爲1的節點個數爲n1,那麼二叉樹的節點總數 n = n0 + n1 + n2
二叉樹的邊數 T = n1 + 2*n2 = n-1 = n0 + n1 + n2 -1

03-真二叉樹、滿二叉樹

真二叉樹:所有節點的度要麼是0,要麼是2。
滿二叉樹:所有節點的度要麼是0,要麼是2。並且所有葉子節點都在最後一層.
在同樣高度的二叉樹中,滿二叉樹的葉子節點數量最多、總節點數量最多。
滿二叉樹一定是真二叉樹,真二叉樹不一定是滿二叉樹。

假設滿二叉樹的高度爲h(h>=1),那麼
第i層的節點數量:2^(i-1)
葉子節點數量:2^(h-1)
總節點數量:n = 2^h -1

04-完全二叉樹01-概念

完全二叉樹:葉子節點只會出現最後2層,且最後1層的葉子節點都靠左對齊。
完全二叉樹從根節點到倒數第二層是一棵滿二叉樹。
滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹。

05-完全二叉樹02-性質01

度爲1的節點只有左子樹。
度爲1的節點要麼是1個,要麼是0個。
同樣節點數量的二叉樹,完全二叉樹的高度最小。

假設完全二叉樹的高度爲h (h>=1),
那麼至少有2(h-1)節點(20+21+22+…+2^(h-2)+1)
最多有2^h-1個節點 (20+21+22+…+2(h-1),滿二叉樹)

總節點數量爲n,則
2^(h-1)<= n < 2^h
h-1 <= log2 n < h
h = floor(log2 n) + 1

06-完全二叉樹03-性質02

一棵有n個節點的完全二叉樹(n > 0),從上到下、從左到右對節點1開始編號,對任意第i個節點:
如果i=1,它是根節點。
如果i>1,它的父節點編號爲floor(i/2)。
如果2i <= n,它的左子點編號是2i。
如果2i > n,它無左子節點。
如果2i + 1 <= n,它的右子點編號是2i+1。
如果2i + 1 > n,它無右子節點。

一棵有n個節點的完全二叉樹(n > 0),從上到下、從左到右對節點0開始編號,對任意第i個節點:
如果i=0,它是根節點。
如果i>0,它的父節點編號爲floor((i-1)/2)。
如果2i+1 <= n-1,它的左子點編號是2i+1。
如果2i+1 > n-1,它無左子節點。
如果2i + 2<= n-1,它的右子點編號是2i+2。
如果2i + 2> n-1,它無右子節點。

07-完全二叉樹04-面試題

如果一棵完全二叉樹有768個節點,求葉子節點的個數。
假設葉子節點個數爲n0,度爲1節點個數爲n1,度爲2節點個數爲n2
總節點個數 n = n0 + n1 + n2 , 而且 n0 = n2 + 1
n = 2n0 + n1 - 1
完全二叉樹n1要麼爲0,要麼爲1
當n1爲1時,n=2n0,n必然是偶數
葉子節點個數n0 = n/2,非葉子節點個數 n1+n2 = n/2
當n1爲0時,n=2n0-1,必然爲奇數
葉子節點個數n0 = (n+1)/2,非葉子節點個數 n1+n2 = ( n-1)/2

08-完全二叉樹05-公式總結

總節點數爲n,則葉子節點數:n0 = floor((n+1)/2) =ceiling(n/2)
非葉子節點個數 n1+n2 = floor(n/2) = ceiling((n-1)/2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章