很容易看出公式是正確的,但我不知道如何證明這一點。那麼其他一些樹如:每個節點有3個孩子,4個孩子的樹......? 謝謝!如何證明子節點的heap堆:第i個節點有2個孩子是2i和2i + 1?
0
A
回答
1
您必須證明,如果在一級序遍歷滿二叉樹,你會經常訪問你的n
第一次在2n
次和第2n+1
次訪問節點的孩子。
我們可以通過歸納來做到這一點。證明的基本情況很簡單:
1
/ \
2 3
現在,我們必須證明,如果它是一些n
真實的,它也是n+1
真:
如果我們訪問的n
孩子們在2n
和2n+1
時間,n+1
的孩子將在他們旁邊,被訪問時間2n+2 = 2(n+1)
和2n+3 = 2(n+1)+1
。
Q.E.D.
.
.
.
n n+1
/ \ / \
2n 2n+1 2n+2 2n+3
的圖像僅僅是一個例子,n
和n+1
可以位於不同的高度。這沒有問題。 n
和n+1
的孩子將始終是鄰居,因爲執行級別順序的方式(訪問節點並將孩子添加到隊列中)。
-1
它更像是一個定義而不是一個證明:你定義它就是這樣,然後你在確保你保持在你定義的不變範圍內的同時使用它。你可能想要證明沒有重疊,但這很容易看到。
對於3個孩子,我們可以使用3i, 3i+1, 3i+2
:
1
/| \
2 3 4 --
| \ \
5 6 7
index: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
label: - - 2 3 4 - - - - - - 5 6 7
然而,正如你所看到的,這得到相當低效。如果你能負擔得起內存,它可能會比使用指針更快,但否則它將不會很有用。
相關問題
- 1. 如何訪問父節點的孩子的孩子節點
- 2. 從堆中刪除第i個節點
- 3. 計數父節點 - 特別是1「男孩」節點和1個「女孩」節點的每個
- 4. 如何檢查一個節點是否是另一個節點的子節點?
- 5. 如何檢查樹中的節點是否有0個或2個孩子?
- 6. 移動節點作爲另一個節點的第一個孩子
- 7. 只返回子節點中的第一個孩子
- 8. 什麼是節點的第一個子節點的精確xpath?
- 9. 現有節點添加到另一個節點的子節點
- 10. 我如何獲得節點的孩子?
- 11. 如何過濾具有某個子節點的節點
- 12. 如何刪除節點的孩子?
- 13. 如何獲取一個節點的所有孩子使用jQuery
- 14. 父節點失去孩子
- 15. 從孩子的子節點獲取值
- 16. 將具有多個子節點的Firebase節點複製到另一個節點
- 17. Java的DOM:第一個孩子的節點數目
- 18. jstree使節點和它的孩子們
- 19. 修改節點中的屬性子串和所有子節點
- 20. 在第i個位置添加節點
- 21. 獲得另一個節點的子節點,定節點名稱
- 22. xslt扁平xml節點子節點和孫子節點
- 23. 只用1個子節點迭代zend_config_xml?
- 24. VB.NET樹狀錯誤添加第二個孩子節點
- 25. 刪除父節點,如果一個子節點是空
- 26. Fancytree JQuery的 - 獲取節點的孩子和孩子分
- 27. 解析有兩個相同的孩子一個XML節點
- 28. HtmlAgilityPack和選擇節點和子節點
- 29. 設計:一^^IB 2I
- 30. 節點JS孩子叉子例外
嘗試通過感應證明... – TravisJ 2015-02-05 16:40:52