堆和樹有什麼區別?堆為什麼要叫堆,不叫樹呢?

時間 2021-05-11 18:52:50

1樓:Pober Wong

堆,是具有下列性質的完全二叉樹:每個節點的值都小於等於其左右孩子節點值是小根堆;(大於等於則是大根堆)。

—— 出自 《資料結構(C++)(第二版)》,2011-6 第二版。

出自大學課本,這應該算是比較權威的一種定義了。至於非要槓堆的概念的話,也沒有太大的意義。

2樓:尋回七里香

堆,也被稱為優先佇列,是按優先順序來進行排序的,優先順序可以按照大小來規定。完全二叉樹只是堆的一種實現方式。而完全二叉樹又由於父節點和子節點下標的數量關係而方便地用陣列來儲存value。

個人覺得,不能把堆作為樹的一種,兩者是不同的資料結構。

3樓:高博

堆有大根堆和小根堆,大根堆的堆結點也就是根結點是最大的,相反小根堆是最小的,他和二叉樹的區別在於,堆的左右子樹節點的值,大於或者等於堆結點的值,而二叉排序樹的左孩子比右孩子小,他是有一定的關係的。

4樓:雷德昭

堆是一種特殊的樹,它每個結點都有乙個值,堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是乙個堆。就類似一堆東西一樣,按照由大到小(或由小到大)「堆」起來。

5樓:Tailong

堆有個特點是最大的或者最小的在最上面,那如果叫做樹,怎麼突顯這個特性呢?跟最大的或根最小的樹?不覺得麻煩嗎?一般堆東西,小的在上面,所以叫堆吧,對應出大的在上面。

6樓:豬鼻蛇

Algorithms 232: Heapsort

所以我瞎猜一下是會不會因為Tree這個名字剛用過?

順便,作者是J. W. J. WILLIAM

為什麼c 中要分為heap(堆)和stack(棧)

吃草的企鵝 首先,其實不是c 特有的,只是c c 把記憶體管理的細節暴露出來了。其實,要講清楚兩者的不同就要從函式是如何呼叫和返回說起。在函式呼叫的時候,程式跳到函式在虛擬記憶體中的開始位址,從而為了在執行完成後回到呼叫位置的位址執行,需要把呼叫位置位址記錄下來,這個位址就儲存在棧裡面。實際上,在跳...

為什麼棧相對於堆很小?

在學習室 很多人的答案喜歡從棧的功能上做解釋,什麼因為棧處理只有push pop所以小 什麼 棧只是的名詞,我們的關注點是它的功能,棧的功能主要是函式呼叫 區域性變數申請 函式引數傳遞所使用的空間,是為函式呼叫的實現提供一些儲存 恢復操作。我感覺沒有回答到精髓上。我覺得要從常識邏輯來分析為什麼不推薦...

為什麼我要湊堆去不相稱的地方

我認為主要問題出自於你要求對方有和你一樣高的道德水平 案例1 和職業素養 案例2 但是你要明白,不是每個人都有機會接受足夠良好的教育 不僅指學歷 不是每個人都能對工作投以巨大的熱情 所以窮麼 所以不要把每個人都放在和你平等的位置上來對待。所以下次你可以試試這樣 乙個女的坐下了 內心活動 懷孕了?高跟...