看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《koehie (開喜烏龍茶)》之銘言: : 請問下列三題該如何解答 ? : 1. 一顆深度為 H 的 Complete Binary Tree 最少有幾個節點 ? : 2. 一顆深度為 H 的 Complete Binary Tree 最多有幾個節點 ? : 3. 假如一顆 Complete Binary Tree 總共有 n 個節點且 n 為奇數, 請問 : 此樹中 Leaf 節點有多少個 ? 照這題題意看起來 Complete Binary Tree應該是"除了leaf以外的節點都有左右子樹"這定義 (因為complete binary tree這個好像在不同書有不同定義的樣子) 如果是這個定義,那麼 1. 樹應該是長類似這樣(此圖是深度H=4): o / \ o o / \ o o / \ o o 如此可以知道 最少有2*H-1 = 2H-1個節點 2. 樹應該是全滿的 類似這樣(此圖是深度H=4): o / \ o o / \ / \ o o o o / \ / \ / \ / \ o o o o o o o o 可知道最多有2^H-1個節點 3. n為奇數這條件其實不是很重要 因為n好像一定會是奇數@@ 設此樹內節點有i個,leaf有f個 n = i + f 又 i = f - 1 => n = 2*f - 1 => f = (n+1)/2 ...所以答案是(n+1)/2個 至於為什麼i = f - 1 我們可以從最小的樹開始考慮 (三個點): o / \ o o 此時的 f=2 , i=1 ,所以 i = f-1沒錯 再來只要更大的樹 都可以從這個樹慢慢生成 (把一個leaf拿掉 換成一個內節點 但內節點一定要有左右子樹 所以又有兩個leaf) =>每將一個leaf拿掉改成內節點 就會再多出兩個leaf 也就是說leaf的數量 少了一 又多了二 => 每操作一次leaf數多一點 而每操作一次 內節點的數量也是多一點 簡單來說 內節點跟leaf的"差"不會變 也就是1 , 所以 i = f-1 統整一下這三題的答案: 1. 2H-1 2. 2^H -1 3. (n+1)/2 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.139.83
Martin23:你第一題好像不對吧... 11/09 13:47
Martin23:不過應該是tree定義不一樣 11/09 13:48
hanbz:A complete binary tree is a binary tree in which every 11/09 14:18
hanbz:level, except possibly the last, is completely filled, 11/09 14:19
hanbz:and all nodes are as far left as possible.[4] 11/09 14:19
hanbz:wiki上的定義 11/09 14:19
hanbz:版本差異在於是除最後一層外都要填滿只有最後一層先填左邊 11/09 14:23
hanbz:還是只要滿足是先填左邊,右邊都可以當作最後一層~~ 11/09 14:24
hanbz:反正以聖經版的解釋為主吧~鑽研版本問題沒太大意義XD 11/09 14:25
真的欸@@; 我記成這個定義 A binary tree in which each node has exactly zero or two children. 這好像有些書上是叫作full binary tree ... 的樣子 主要好像就是complete跟full這兩種在各版本有一些出入 所以聖經版的解釋是哪一個..? 如果是照三樓的定義的話 這題的答案應該是 2^(H-1) ..嗎? (前幾層全填滿 最下最左留一個leaf) ※ 編輯: jameschou 來自: 140.113.139.83 (11/09 14:33)
compulsory:strictly BT? 11/09 15:25
KenJcFar:full BT ,complete BT的定義在離散和資結上似乎就有不同 11/10 00:05
sneak: 還是只要滿足是先填左邊 https://muxiv.com 08/09 10:52
sneak: 還是只要滿足是先填左邊 https://daxiv.com 09/11 14:02
sneak: and all nod https://noxiv.com 12/15 00:27