因此,我要处理的树的compareTo()方法通常会得出相同的结果,但是我需要在PriorityQueue中现有节点之前插入新树。现在,似乎PriorityQueue的java实现将新节点随机放置在相似节点上。
while (pq.size() >= 2) {
System.out.println("Iteration: " + i++);
printPQ();
BinaryTree b1 = pq.remove();
BinaryTree b2 = pq.remove();
BinaryTree newTree = new BinaryTree(b1, b2);
//add the newly created tree back into pq
pq.add(newTree);
System.out.println();
}
对于那些想知道的人,这是霍夫曼代码的实现。
最佳答案
您可以修改compareTo(...)
方法。如果将创建时间作为属性添加到您的BinaryTree
中,则可以将其包括在比较中,并确保PriorityQueue
中新添加的元素的顺序。
关于java - Java优先级队列:如果自然顺序(compareTo)相同,如何确保首先插入新节点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28404806/