package com.interview.tree; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; /** * Date 04/20/2015 * @author tusroy * * Video link - https://youtu.be/D2bIbWGgvzI * * Given a binary tree print its level order traversal in reverse * e.g 1 * 2 3 * 4 5 6 7 * * Output should be 4 5 6 7 2 3 1 * * Solution * Maintain a stack and queue. Do regular level order traversal but * put right first in the queue. Instead of printing put the result * in stack. Finally print contents of the stack. * * Time and space complexity is O(n) * * References : http://www.geeksforgeeks.org/reverse-level-order-traversal/ */ public class LevelOrderTraversalInReverse { public void reverseLevelOrderTraversal(Node root){ if(root == null){ return; } Queue<Node> q = new LinkedList<>(); Stack<Node> s = new Stack<>(); q.offer(root); while(!q.isEmpty()){ root = q.poll(); if(root.right != null){ q.offer(root.right); } if(root.left != null){ q.offer(root.left); } s.push(root); } while(!s.isEmpty()){ System.out.print(s.pop().data + " "); } } public static void main(String args[]){ BinaryTree bt = new BinaryTree(); Node root = null; root = bt.addNode(10, root); root = bt.addNode(30, root); root = bt.addNode(25, root); root = bt.addNode(35, root); root = bt.addNode(-10, root); root = bt.addNode(0, root); root = bt.addNode(-20, root); root = bt.addNode(-15, root); root = bt.addNode(45, root); LevelOrderTraversalInReverse rlo = new LevelOrderTraversalInReverse(); rlo.reverseLevelOrderTraversal(root); } }