![](http://static.tieba.baidu.com/tb/editor/images/face/i_f18.png?t=20131111)
闲着没事写了一个
package test.algo;
import java.util.Deque;
import java.util.LinkedList;
public class BiTreeTraverse{
public static void main(String[] args){
final BiTreeNode root = new BiTreeNode(4)
.left(new BiTreeNode(2)
.left(new BiTreeNode(1))
.right(new BiTreeNode(3))
)
.right(new BiTreeNode(5)
.right(new BiTreeNode(7)
.left(new BiTreeNode(6))
)
);
final Object flag = new Object(); // 仅作为标记用的对象
Deque<Object> stack = new LinkedList<>();
stack.push(root);
while (!stack.isEmpty()){
if (stack.peek() == flag){ // 检查是否输出标记
stack.pop();
BiTreeNode node = (BiTreeNode)stack.pop();
System.out.print(node.data);
}else{
BiTreeNode node = (BiTreeNode)stack.peek(); // 注意这里把节点留在栈里了
stack.push(flag); // 嵌入输出标记,以示输出栈顶节点
if (node.right != null) stack.push(node.right);
if (node.left != null) stack.push(node.left);
}
}
System.out.println();
}
}
class BiTreeNode{
BiTreeNode left;
BiTreeNode right;
Object data;
BiTreeNode(){
}
BiTreeNode(Object data){
this.data = data;
}
BiTreeNode left(BiTreeNode left){
this.left = left;
return this;
}
BiTreeNode right(BiTreeNode right){
this.right = right;
return this;
}
}
用于参考的二叉树
4
2 5
1 3 7
6