小根堆和大根堆
完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
满二叉树:除了叶子节点外,每个节点的两个子节点都全的二叉树。
小根堆:首先小根堆是一个完全二叉树,并且任何子树的最小值是它的根节点。
大根堆:同理,大根堆也是一个完全二叉树,并且任何子树的最大值是它的根节点。
Java 中现成的堆
PriorityQueue:
PriorityQueue<Integer> queue1 =
new PriorityQueue<Integer>();
queue1.add(10);
queue1.add(8);
System.out.println(queue1.poll()); // 8
PriorityQueue<Integer> queue2 =
new PriorityQueue<Integer>((o1,o2) -> o1 - o2);
queue2.add(10);
queue2.add(8);
System.out.println(queue2.poll()); // 8
PriorityQueue<Integer> queue3 =
new PriorityQueue<Integer>((o1,o2) -> o2 - o1);
queue3.add(10);
queue3.add(8);
System.out.println(queue3.poll()); // 10
PriorityQueue:默认自然排序(升序)是小根堆,可以通过传递一个自己的比较器,来定义大根堆。此外PriorityQueue存放的元素,要么有自然排序,否则必须实现比较器。不然会报运行时异常ClassCastException 。