package com.interview.tree;
import java.util.ArrayList;
import java.util.Map;
import java.util.List;
import java.util.TreeMap;
/**
* http://www.geeksforgeeks.org/print-binary-tree-vertical-order-set-2/
*/
public class VerticalTreePrinting {
public void printVertical(Node root){
Map<Integer,List<Node>> map = new TreeMap<Integer,List<Node>>();
populateMap(root,map,0);
printLevel(map);
}
private void printLevel(Map<Integer,List<Node>> map){
for(Integer key : map.keySet()){
List<Node> listNodes = map.get(key);
for(Node n : listNodes){
System.out.print(n.data + " ");
}
System.out.println();
}
}
private void populateMap(Node root, Map<Integer,List<Node>> map,int level){
if(root == null){
return;
}
List<Node> listNodes = null;
if(map.containsKey(level)){
listNodes = map.get(level);
}else{
listNodes = new ArrayList<Node>();
map.put(level, listNodes);
}
listNodes.add(root);
populateMap(root.left,map,level-1);
populateMap(root.right,map,level+1);
}
public static void main(String args[]){
BinaryTree bt = new BinaryTree();
Node head = null;
head = bt.addNode(3, head);
head = bt.addNode(-6, head);
head = bt.addNode(-7, head);
head = bt.addNode(2, head);
head = bt.addNode(9, head);
head = bt.addNode(6, head);
head = bt.addNode(11, head);
head = bt.addNode(13, head);
head = bt.addNode(12, head);
VerticalTreePrinting vtp = new VerticalTreePrinting();
vtp.printVertical(head);
}
}