Print the Bottom View of the Binary Tree.

Objec­tive: Given a binary tree, print it in Bottom View of it.

What is Bottom View: Bottom view means when you look the tree from the bottom the nodes you will see will be called the bottom view of the tree. See the exam­ple below.

Bottom View of a Binary Treeas you can see in the example above,8, 4, 9, 5, 3, 7 is the bottom view of the given binary tree.


This Approach is quite sim­i­lar to the Print the Binary Tree in Ver­ti­cal Order Path.
and Print The Top View of a Binary Tree. Just mod­i­fied the code so that it will print only the last ele­ment it will encounter in the ver­ti­cal order. That will be the bottom view.

How will you know that you are vis­it­ing the last node at every level(Vertically)?

  • Take a variable called level, whenever you go left, do level++ AND whenever you go right do level–.
  • With step above we have separated out the levels vertically.
  • level distribution

    level distribution

  • Now you need to store the ele­ments of each level, so cre­ate a TreeMap and the (key,value) pair will be (level,element at that level).
  • Now all we need to do the level order tra­ver­sal and store only recent visited node at each level(vertically), this way you will be storing only the last element at each level.
  • We will use sim­ple queue tech­nique for level order tra­ver­sal or BFS.
  • we will cre­ate a class QueuePack, this will store the objects con­tain­ing node and its level.
  • At the end traverse through TreeMap and print all the values in it, it will be the bottom view of a tree.
  • See the code for bet­ter understanding.


4 6 5 7 8 


Top Companies Interview Questions..-

Google Microsoft Amazon Facebook more..

If you find anything incorrect or you feel that there is any better approach to solve the above problem, please write comment.

You may also like...

  • Xiaozhen Zhong

    how would the tpre-order traverse guarantee most recent visited node would be at “bottom” of a vertical level?
    Would following sequence work?
    Node root = new Node(1);
    root.left = new Node(2);
    root.right = new Node(3);
    root.left.left = new Node(4);
    root.left.right = new Node(5);
    root.left.right.left = new Node(6);
    root.left.right.right = new Node(7);
    root.left.right.right.right = new Node(9); ==> add another right node, which will be at same vertical level of node(8) but lower.
    root.right.right = new Node(8);
    We should get 4 6 5 7 9 as bottom view, but my guess is the code will return 4 6 5 7 8 (wrong result)

    • tutorialhorizon

      Hi Xiaozhen,

      Code is correct and will return 4 6 5 7 9, don’t concentrate on preorder traversal, we are storing the node at each vertical level in a hash map ( in fact we are updating it so hash map will contain the last node visited at that level) See the diagram.

  • kumar
  • Subodh Karwa

    Can you please explain how 5 and 6 both being at level -0 are printed using the code ?

  • suvro

    Print In-Order nodes where either left or right child is NULL

    private static void printBottomView(Tree tree) {


%d bloggers like this: