84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我知道堆是一个特殊的二叉树,但是为什么每次向堆中插入元素时都需要重排序?用java代码如何实现?
走同样的路,发现不同的人生
堆不光有二元堆, 還有三叉堆等等多叉堆, 之所以每次向堆中插入元素都要重新排序, 是因為堆本身的特性, 如果一個二叉堆是最小堆, 那麼每個節點的兩個子節點都應該比自己大, 當堆中所有結點都小於等於它的兩個子節點時, 此時堆有序; 當你插入一個新節點,就會破壞這種堆有序的狀態, 所以需要重新排序. 至於java的實現版本上網找吧, 很好找的, JDK的堆實現是java.util.PriorityQueue類, 題主可以去看看
堆不光有二元堆, 還有三叉堆等等多叉堆, 之所以每次向堆中插入元素都要重新排序, 是因為堆本身的特性, 如果一個二叉堆是最小堆, 那麼每個節點的兩個子節點都應該比自己大, 當堆中所有結點都小於等於它的兩個子節點時, 此時堆有序; 當你插入一個新節點,就會破壞這種堆有序的狀態, 所以需要重新排序. 至於java的實現版本上網找吧, 很好找的, JDK的堆實現是java.util.PriorityQueue類, 題主可以去看看