因此,我要处理的树的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/

10-13 00:10