package algo;
import problems.utils.TreeNode;
import java.util.LinkedList;
import java.util.Queue;
/**
* Created by sherxon on 1/3/17.
*/
public class TreeTraversals {
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
System.out.println("InOrder");
inOrder(root);
System.out.println();
System.out.println("PreOrder");
preOrder(root);
System.out.println();
System.out.println("PostOrder");
postOrder(root);
}
public static void postOrder(TreeNode root) {
if (root == null) return;
postOrder(root.left);
postOrder(root.right);
System.out.print(root.val + " ");
}
public static void preOrder(TreeNode root) {
if (root == null) return;
System.out.print(root.val + " ");
preOrder(root.left);
preOrder(root.right);
}
public static void inOrder(TreeNode root) {
if (root == null) return;
inOrder(root.left);
System.out.print(root.val + " ");
inOrder(root.right);
}
public void levelOrder(TreeNode root) {
if (root == null) return;
Queue<TreeNode> q = new LinkedList<>();
q.add(root); // add first level to queue
int level = 1;
while (!q.isEmpty()) {
TreeNode x = q.remove();
level--;
if (x.left != null)
q.add(x.left);
if (x.right != null)
q.add(x.right);
if (level == 0 && !q.isEmpty()) {
level += q.size();
System.out.println(q);
}
}
}
}