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类, 题主可以去看看