2014-11-23 4 views
0

Я пытаюсь реализовать обход уровня для моего BST, но я получаю странную ошибку. Вот код:Ошибка реализации двоичного дерева поиска порядка с Java PriorityQueue

public void levelOrderTraverseTree(Node focusNode) { 
    PriorityQueue<Node> currentLevel = new PriorityQueue<Node>(); 
    PriorityQueue<Node> nextLevel = new PriorityQueue<Node>(); 

    currentLevel.add(focusNode); 

    while (!currentLevel.isEmpty()) { 
     Iterator<Node> iter = currentLevel.iterator(); 
     while (iter.hasNext()) { 
      Node currNode = iter.next(); 
      System.out.println(currentLevel.remove()); 
      System.out.println("adding "+currNode.leftChild+"to nextLevel"); 
      nextLevel.add(focusNode.leftChild); 
      System.out.println("adding "+currNode.rightChild+"to nextLevel"); 
      nextLevel.add(focusNode.rightChild); 
     } 

     currentLevel = nextLevel; 
     nextLevel.clear(); 

    } 

} 

Когда я пытаюсь запустить его, я получаю эту ошибку

Exception in thread "main" java.lang.ClassCastException: Node cannot be cast to java.lang.Comparable

на линии, которая добавляет focusNode.rightChild к nextLevel очереди, или nextLevel.add(focusNode.rightChild);

Я не уверен, почему эта ошибка происходит, поэтому любое понимание будет оценено по достоинству.

ответ

1

Exception in thread "main" java.lang.ClassCastException: Node cannot be cast to java.lang.Comparable означает, что вы должны реализовать интерфейс java.lang.Comparable в своем классе Node (что-то вроде:

public class Node implements Comparable { 
    //... 
}) 

) для ваших объектов Node быть сравнима с другими узлами.

+0

Это решило мою проблему! Большое спасибо. – Zach

+1

Отлично! :) Пожалуйста, примите мой ответ! : D –

+0

Пришлось ждать предела времени, принял его сейчас – Zach

Смежные вопросы