public class Order{
static class TreeNode {
String val;
TreeNode left;
TreeNode right;
TreeNode(String x) {
val = x;
}
}
static void preOrder(TreeNode root) {
Stack<TreeNode> stack = new Stack();
TreeNode cur = root;
while (cur != null || !stack.empty()) {
if (cur != null) {
System.out.println(cur.val);
stack.push(cur);
cur = cur.left;
} else {
TreeNode pop = stack.pop();
cur = pop.right;
}
}
}
static void inOrder(TreeNode root) {
Stack<TreeNode> stack = new Stack();
TreeNode cur = root;
while (cur != null || !stack.empty()) {
if (cur != null) {
stack.push(cur);
cur = cur.left;
} else {
TreeNode pop = stack.pop();
System.out.println(pop.val);
cur = pop.right;
}
}
}
static void postOrder(TreeNode root) {
Stack<TreeNode> stack = new Stack();
stack.push(root);
TreeNode cur, pre = null;
while (!stack.empty()) {
cur = stack.peek();
if ((cur.left == null && cur.right == null) ||
(pre != null && (pre == cur.left || pre == cur.right))) {
System.out.println(cur.val);
pre = stack.pop();
} else {
if (cur.right != null) {
stack.push(cur.right);
}
if (cur.left != null) {
stack.push(cur.left);
}
}
}
}
public static void main(String[] args) {
TreeNode a = new TreeNode("a");
TreeNode b = new TreeNode("b");
TreeNode c = new TreeNode("c");
TreeNode d = new TreeNode("d");
TreeNode e = new TreeNode("e");
TreeNode f = new TreeNode("f");
TreeNode g = new TreeNode("g");
TreeNode h = new TreeNode("h");
a.left = b;
b.left = c;
b.right = d;
d.left = e;
a.right = f;
f.left = g;
f.right = h;
inOrder(a);
}
}