2012-02-02 34 views
4

我試圖做一個二叉樹上的線性順序遍歷,但無法獲得正確的輸出。基本上我已經創建了一個隊列,並開始排隊根,然後直到隊列爲空,我將第一個元素出隊並將其子元素添加到隊列末尾。出列時返回一個通用元素()。我在將此元素轉換爲樹節點時遇到問題,因此我可以在下一步中將其子節點排入隊列末尾。這是我迄今所做的:如何進行級別訂單遍歷?

爲BTPosition和NodeQueue
public void levelOrderTraversal() 
{ 
    NodeQueue<E> queue = new NodeQueue<E>(); 
    BTPosition<E> current = root; 
    queue.enqueue(current.element()); 
    E temp = null; 

    while(!queue.isEmpty()) 
    { 
     temp = queue.dequeue(); 
     System.out.println(temp.toString()); 
     current.setElement(temp); 

     if (hasLeft(current)) 
     { 
      queue.enqueue(left(current).element()); 
     } 
     if (hasRight(current)) 
     { 
      queue.enqueue(right(current).element()); 
     } 
    } 
} 

API可以在http://net3.datastructures.net/doc4/index.html?net/datastructures/

任何建議都非常讚賞找到..

回答

4

你會希望隊列爲類型BTPosition<E><E>只是對象類型,例如IntegerStringBTPosition似乎是二叉樹中的實際節點。

public void levelOrderTraversal() 
{ 
    NodeQueue<BTPosition<E>> queue = new NodeQueue<BTPosition<E>>(); 
    BTPosition<E> current = root; 
    queue.enqueue(current); 

    while(!queue.isEmpty()) 
    { 
     current = queue.dequeue(); 
     System.out.println(temp.element().toString()); 

     if (current.getLeft() != null) 
     { 
      queue.enqueue(current.getLeft()); 
     } 
     if (current.getRight() != null) 
     { 
      queue.enqueue(current.getRight()); 
     } 
    } 
}