import java.util.*; public class TreeTraversal { static class Node { T value; Node left; Node right; Node(T value) { this.value = value; } void visit() { System.out.print(this.value + " "); } } static enum ORDER { PREORDER, INORDER, POSTORDER, LEVEL } static void traverse(Node node, ORDER order) { if (node == null) { return; } switch (order) { case PREORDER: node.visit(); traverse(node.left, order); traverse(node.right, order); break; case INORDER: traverse(node.left, order); node.visit(); traverse(node.right, order); break; case POSTORDER: traverse(node.left, order); traverse(node.right, order); node.visit(); break; case LEVEL: Queue> queue = new LinkedList<>(); queue.add(node); while(!queue.isEmpty()){ Node next = queue.remove(); next.visit(); if(next.left!=null) queue.add(next.left); if(next.right!=null) queue.add(next.right); } } } public static void main(String[] args) { Node one = new Node(1); Node two = new Node(2); Node three = new Node(3); Node four = new Node(4); Node five = new Node(5); Node six = new Node(6); Node seven = new Node(7); Node eight = new Node(8); Node nine = new Node(9); one.left = two; one.right = three; two.left = four; two.right = five; three.left = six; four.left = seven; six.left = eight; six.right = nine; traverse(one, ORDER.PREORDER); System.out.println(); traverse(one, ORDER.INORDER); System.out.println(); traverse(one, ORDER.POSTORDER); System.out.println(); traverse(one, ORDER.LEVEL); } }