Tree | Binary Tree | |
---|---|---|
可否為空 | , 至少一樹根 | |
(存在 時) |
Def : 高度起始點為 1
Formula:
Def : 高度起始點為 0
Formula:
Def : 高度起始點為
Formula:
Def : 高度起始點為
Formula:
藉由上述定理我們可以對 Node 數取 log 反推回高度
在上述圖例得知
總數
二元樹中 Degree 為 0~2 ( 之後的 m-way Tree 同理 )
Degree 為 1 的 Node 有 1 個 Branch
Degree 為 2 的 Node 有 2 個 Branch
而 總數
所以 總數
藉由上述兩公式我們可以整理出
整理一下目前有的公式
Def : 高度起始點為 1
補充:針對 3. 4. 的設計題
某樹之 ( 最大Degree 為k )
的 有 個 ,, 求 總數?
Sol:
根據
3.
個數 個數 個數從題目 得
根據等差級數根據
4.
Nodes = ( 1 * d1 + 2 * d2 ) + 1
從題目 得 ( 1 * 1 + 2 * 2 + … + k * k ) + 1
根據平方合 Nodes =移項即可得 Leaf =
關鍵字 Degree-0 (Leaf) , Degree-1 , Degree-2 , Height , Nodes , Branch 互通到熟練吧
[color=#] 計算完請判斷該樹是否存在此節點
Parent , Child 編號關係證明:數學歸納法(略)
Def:高度起始點 1
因此我們得知,給定一 Complete Binary Tree
Def:編號 (Index) 起始點 1 , 高度 = k
- 假設 k = 3
- 建立一個
int tree[]
陣列,空間為:2k-1 = 8 = s
Index:0 ,1 ,2 ,3 ,4 ,5 ,6 ,7- 若使用迴圈,終止條件為
- i<2k-1 = 8-1 = s-1
- i<=2k-2 = 8-2 = s-2
- 存在情況下,設某點為 n
- Root =
tree[1]
- n's Parent =
tree[n/2]
* 請注意程式語言對浮點數處理特性- n's Left Child =
tree[2*n]
- n's Right Child =
tree[2*n+1]
Def:編號 (Index) 起始點 0 , 高度 = k
- 假設 k = 3
- 建立一個
int tree[]
陣列,空間為:2k+1-1 = 8 = s
Index:0 ,1 ,2 ,3 ,4 ,5 ,6 ,7- 若使用迴圈,終止條件為
- i<2k+1-1 = 8-1 = s-1
- i<=2k+1-2 = 8-2 = s-2
- 存在情況下,設某點為 n
- Root =
tree[0]
- n's Parent =
tree[(n-1)/2]
* 請注意程式語言對浮點數處理特性- n's Left Child =
tree[2*n+1]
- n's Right Child =
tree[2*n+2]
優點:
缺點:
Def:Nodes = n
Linked List 中的 Link 相當於定理所提到的 Branch
而在程式當中每個 Node 結構都有兩條 Link,有別於定理中的觀念
我們會將指向 Null 的 Link 也一併算進去 (藍Link)
實際上公式還是可行的,只要我們將 Null 也視為 Node不過我們想探討的是沒有使用到的 Link (藍Link)
以下將 Branch 視為 LinkLinks = 所有 Degree 合
因為每一個 Node 皆有 2 個 Links
=> 所有的 Links = 2*n根據定理
有使用到的 Links = n - 1根據
3.
4.
得出
=>所有的 Links - 有使用到的 Links = 未使用的 Links
=> (2 * n) - (n-1) = n+1可以這樣記
n-1 (未使用的LINK) -> n (Nodes) -> n+1 (使用的LINK)
優點:
缺點:
回憶一下,以下兩種結構的樹,如果是 Tree 那麼兩顆是一樣的,如果是 Binary Tree 則是不同的
此節探討的就是當 Binary Tree 具有 N Nodes (N 1),那麼這棵樹有幾種表示的方法,也就是他有幾種不同的結構
給 3 Nodes 畫出所有的可能的 Binary Tree
to be continued
p.194
Data Structure