package com.interview.tree; import java.util.Deque; import java.util.LinkedList; /** * Youtube link - https://youtu.be/nzmtCFNae9k * Youtube link - https://youtu.be/elQcrJrfObg * Youtube link - https://youtu.be/qT65HltK2uE * Youtube link - https://youtu.be/ZM-sV9zQPEs * * http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion/ * http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion-and-without-stack/ * http://www.geeksforgeeks.org/iterative-preorder-traversal/ */ public class TreeTraversals { public void inOrder(Node root){ if(root == null){ return; } inOrder(root.left); System.out.print(root.data + " "); inOrder(root.right); } public void preOrder(Node root){ if(root == null){ return; } System.out.print(root.data + " "); preOrder(root.left); preOrder(root.right); } public void postOrder(Node root){ if(root == null){ return; } postOrder(root.left); postOrder(root.right); System.out.print(root.data + " "); } public void inorderItr(Node root){ Deque<Node> stack = new LinkedList<Node>(); Node node = root; while(true){ if(node != null){ stack.addFirst(node); node = node.left; } else{ if(stack.isEmpty()){ break; } node = stack.pollFirst(); System.out.println(node.data); node = node.right; } } } public void preOrderItr(Node root){ Deque<Node> stack = new LinkedList<Node>(); stack.addFirst(root); while(!stack.isEmpty()){ root = stack.pollFirst(); System.out.print(root.data + " "); if(root.right != null){ stack.addFirst(root.right); } if(root.left!= null){ stack.addFirst(root.left); } } } public void postOrderItr(Node root){ Deque<Node> stack1 = new LinkedList<Node>(); Deque<Node> stack2 = new LinkedList<Node>(); stack1.addFirst(root); while(!stack1.isEmpty()){ root = stack1.pollFirst(); if(root.left != null){ stack1.addFirst(root.left); } if(root.right != null){ stack1.addFirst(root.right); } stack2.addFirst(root); } while(!stack2.isEmpty()){ System.out.print(stack2.pollFirst().data + " "); } } public void postOrderItrOneStack(Node root){ Node current = root; Deque<Node> stack = new LinkedList<>(); while(current != null || !stack.isEmpty()){ if(current != null){ stack.addFirst(current); current = current.left; }else{ Node temp = stack.peek().right; if (temp == null) { temp = stack.poll(); System.out.print(temp.data + " "); while (!stack.isEmpty() && temp == stack.peek().right) { temp = stack.poll(); System.out.print(temp.data + " "); } } else { current = temp; } } } } public static void main(String args[]){ BinaryTree bt = new BinaryTree(); Node head = null; head = bt.addNode(10, head); head = bt.addNode(15, head); head = bt.addNode(19, head); head = bt.addNode(17, head); head = bt.addNode(11, head); head = bt.addNode(-11, head); TreeTraversals tt = new TreeTraversals(); tt.postOrder(head); System.out.println(); tt.postOrderItr(head); System.out.println(); tt.postOrderItrOneStack(head); } }