Q
比較堆和樹/
0
A
回答
1
計算機科學中的樹是表示樹結構的抽象數據類型。根節點可以由子節點組成,其中每個子節點也是樹。
請注意,並非所有的樹都是二叉搜索樹。二叉搜索樹是有2個定義屬性樹:
每個節點最多有2個孩子
的左孩子小於父
右孩子大於父親
另一種特殊的樹是堆。堆是特殊的,因爲它具有以下屬性:
- 樹中的每個節點總是小於或等於每個子節點。
現在你如何選擇實現一棵樹取決於你。樹可以通過指針/引用來實現;一個節點存儲一個值和指向其子的指針/引用。
一棵樹也可以作爲一個數組來實現。父母在索引0處。如果最多有d
個孩子,則索引k
處父母的子女i
處於索引d*k+i
。除此之外,我們希望使用數組,因爲與遍歷指針相比,數組非常快。
但是,二叉搜索樹通常使用指針來實現。這是因爲兩個原因。
如果這是一個數組,它總是會爲最壞的情況分配足夠的空間。換句話說,如果你的二叉搜索樹的高度爲
h
,你的數組的大小必須是O(2^h)
。這很糟糕,因爲你的樹只能包含h
元素。刪除也非常耗時。如果刪除根節點,則必須將整個子樹移動以替換它。我們希望首先使用二叉搜索樹的原因是爲了保證
O(log n)
操作,我們不會使用數組。
堆,在手上,通常作爲數組實現的,因爲它的樹總是完全平衡的(每個節點都有d
孩子除了可能在葉)這意味着很少有浪費的空間,所以我們贏了不必擔心1)。此外,堆的刪除不會像二叉搜索樹那樣劇烈地影響樹的結構,所以2)也不適用。
相關問題
- 1. 比較和堆棧
- 2. Java堆棧比較
- 3. 比較兩棵樹
- 4. 比較隊列和堆棧的內容
- 5. 在樹狀圖中比較樹
- 6. Python的XML比較樹的
- 7. javascript比較兩個DOM樹
- 8. 比較兩個二叉樹
- 9. 比較助推屬性樹
- 10. Verilog比較器樹型
- 11. Java通用樹可比較
- 12. 樹形圖比較器
- 13. Findbugs和比較
- 14. 可比較和比較器接口
- 15. 泛型堆中的比較運算符
- 16. 使用C#計算堆排序比較
- 17. 日誌2 N通用比較樹
- 18. 比較不與二叉樹工作
- 19. 比較在AVL樹由指針對象
- 20. 比較Python中的兩個JSON樹
- 21. 表達式樹,對象比較器
- 22. 比較註冊表樹與reg文件
- 23. 比較文件路徑樹在Python
- 24. 比較源碼樹與git存儲庫?
- 25. Multiway樹可比較的接口問題
- 26. Linq表達式樹字符串比較
- 27. 比較語法樹模α-轉化
- 28. Eclipse中的樹比較修訂版SVN
- 29. 的CompareTo()和比較()比較的方法和可比
- 30. Java - 如何計算和比較二叉樹
A * d-ary heap *通常以數組的形式實現。還有很多其他類型的堆,其中大多數堆不適合數組實現。 –