2013-11-10 4 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 классе.

Кстати, сравнение булевых выражений с постоянными значениями true или false - это просто ужасный стиль. Например

while(e == false) 

гораздо более эффективно выражается как

while(!e) 
Смежные вопросы