2014-11-23 90 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.rightChildnextLevel隊列行,或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 2014-11-23 19:52:29

+1

太棒了! :)請接受我的回答! :D – 2014-11-23 19:53:57

+0

不得不等待的時間限制,現在接受它 – Zach 2014-11-23 20:02:57