节点类 定义如下:
class TreeNode{
int value;
TreeNode left;
TreeNode right;
TreeNode(int value){
this.value = value;
}
}
前序遍历非递归实现
public static void preOrder(TreeNode p){
if(p == null) return;
Stack<TreeNode> stack = new Stack<TreeNode>();
while(!stack.empty() || p != null){
while(p != null){
System.out.println(p.value);
stack.push(p);
p = p.left;
}
p = stack.pop();
p = p.right;
}
}
中序遍历非递归实现
public static void inOrder(TreeNode p){
if(p == null) return;
Stack<TreeNode> stack = new Stack<TreeNode>();
while(!stack.empty() || p != null){
while(p != null){
stack.push(p);
p = p.left;
}
p = stack.pop();
System.out.println(p.value);
p = p.right;
}
}
后序遍历的非递归实现
public static void postOrder(TreeNode p){
if(p == null) return;
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode temp = p;
while(!stack.empty() || p != null){
while(p != null){
stack.push(p);
p = p.left;
}
p = stack.peek().right;
if(p == null || p == prev){
p = stack.pop();
System.out.println(p.value);
prev = p;
p = null;
}
}
}