java大顶堆和小顶堆
时间: 2023-12-31 16:20:21 浏览: 103
大顶堆和小顶堆是堆排序算法中使用的两种堆的形式。在Java中,我们可以使用优先队列(PriorityQueue)来实现大顶堆和小顶堆。默认情况下,优先队列实现的是小顶堆,可以通过传入一个自定义的比较器来实现大顶堆。
大顶堆的实现方式是,根节点的关键字是堆中所有节点关键字中最大的,即根节点的值大于或等于左子树和右子树的值。
小顶堆的实现方式是,根节点的关键字是堆中所有节点关键字中最小的,即根节点的值小于或等于左子树和右子树的值。
在Java中,可以通过以下方式创建大顶堆和小顶堆:
1. 创建一个空的优先队列,并传入一个自定义的比较器来实现大顶堆。比如,可以使用Collections.reverseOrder()方法来创建一个降序比较器,这样优先队列将按照降序排列元素。
2. 使用add()或offer()方法向优先队列中添加元素。它们会根据比较器的规则将元素插入合适的位置。
例如,以下代码演示了如何创建一个大顶堆和小顶堆:
// 创建大顶堆
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
maxHeap.add(5);
maxHeap.add(3);
maxHeap.add(7);
System.out.println(maxHeap.poll()); // 输出:7
// 创建小顶堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
minHeap.add(5);
minHeap.add(3);
minHeap.add(7);
System.out.println(minHeap.poll()); // 输出:3
阅读全文