2013-11-10 101 views
1

我已經設法通過它的插入方法創建一個線程二叉搜索樹。我現在需要遍歷樹並按順序打印。我有可用的代碼,但我使用布爾標誌來確定是否打印了特定的節點。對於這個任務,它不能是遞歸的。我想知道是否有一種可能的方法將所有布爾標誌全部清除爲false,因爲如果我再次嘗試打印,它將會,並且確實不起作用。有什麼建議麼?這裏是我的顯示方法的副本。線程化二叉搜索樹Java

public void display(){ 
    Node parent=top; 
    Node current=top; 
    while (current != null){ 
     parent = current; 
     current = current.getLeft(); 
    } 
    System.out.println(parent); 
    current=parent.getRight(); 
    while(current!= null){ 
     while(current.isHasLeftThread()==false && current.getLeft().hasBeenHere()==false){ 
      parent = current; 
      current=current.getLeft(); 
     } 
     System.out.println(current); 
     current.setBeenHere(true); 
     current=current.getRight(); 
     System.out.println(current); 
     current.setBeenHere(true); 
     current = current.getRight(); 
    } 
} 

回答

0

您可以使用一個新的Collections.newSetFromMap(new IdentityHashMap< Node, Boolean >())每次做簿記訪問節點,而不是包括在Node類本身就是一個標誌。

順便提一句,比較布爾表達式與常量值truefalse只是可怕的風格。例如

while(e == false) 

是更有效地表現爲

while(!e)