public class Test_01 { static class Node { Node parent; Node left; Node right; String content; boolean visited; Node(String content) { this.content = content; } void setLeft(Node left) { this.left = left; left.parent = this; } void setRight(Node right) { this.right = right; right.parent = this; } } public static void main(String[] args) { Node na = new Node("A"); Node nb = new Node("B"); Node nc = new Node("C"); Node nd = new Node("D"); Node ne = new Node("E"); Node nf = new Node("F"); Node ng = new Node("G"); Node nh = new Node("H"); Node ni = new Node("I"); na.setLeft(nb); na.setRight(nc); nb.setLeft(nd); nb.setRight(ne); nc.setLeft(nf); nc.setRight(ng); ne.setLeft(ni); nf.setLeft(nh); test1(na); System.out.println(); System.out.println("=========================="); test2(na); System.out.println(); System.out.println("=========================="); test3(na); System.out.println(); System.out.println("=========================="); test4(na); System.out.println(); System.out.println("=========================="); test5(na); System.out.println(); System.out.println("=========================="); test6(na); } private static void test1(Node root) { if (root != null) { System.out.print(root.content+","); test1(root.left); test1(root.right); } } private static void test2(Node root) { if (root != null) { test2(root.left); System.out.print(root.content+","); test2(root.right); } } private static void test3(Node root) { if (root != null) { test3(root.left); test3(root.right); System.out.print(root.content+","); } } private static void test4(Node root) { Stack<Node> stack = new Stack<Node>(); Node current = root; while (current != null || !stack.isEmpty()) { while (current != null) { stack.push(current); current = current.left; } current = stack.peek(); stack.pop(); System.out.print(current.content+","); current = current.right; } } private static void test5(Node root) { Stack<Node> stack = new Stack<Node>(); Node current = root; while (current != null || !stack.isEmpty()) { while (current != null) { System.out.print(current.content+","); stack.push(current); current = current.left; } current = stack.peek(); stack.pop(); current = current.right; } } private static void test6(Node root) { Stack<Node> stack = new Stack<Node>(); Node current = root; while (current != null || !stack.isEmpty()) { while (current != null) { stack.push(current); current = current.left; } current = stack.peek(); stack.pop(); if (!current.visited) { current.visited = true; stack.push(current); current = current.right; } else { System.out.print(current.content+","); current = null; } } } }