我已经设法通过它的插入方法创建一个线程二叉搜索树。我现在需要遍历树并按顺序打印。我有代码可以工作,但我使用布尔标志来确定我是否打印了该特定节点。对于此分配,它不能是递归的。我想知道是否有可能的方法将所有布尔标志完全清除为假,因为如果我再次尝试打印它将会,并且确实不起作用。有什么建议?这是我的显示方法的副本。
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 :(得分:0)
您可以使用全新的Collections.newSetFromMap( new IdentityHashMap< Node, Boolean >() )
每次为受访节点进行簿记,而不是在Node
类本身中包含标记。
顺便说一句,将布尔表达式与常量值true
或false
进行比较只是一种糟糕的风格。例如
while( e == false )
更有效地表达为
while( !e )