why it give error or how to debug it???
import java.util.*;
class VOPair {
int data;
int vl;
int hl;
@Override
public String toString() {
return this.data + "";
}
}
class VOComparator implements Comparator {
@Override
public int compare(VOPair o1, VOPair o2) {
VOPair p1 = (VOPair)o1;
VOPair p2 = (VOPair)o2;
return -1*(p1.hl - p2.hl);
}
}
public class Tree {
class Node{
int data;
Node left;
Node right;
Node(int data)
{
this.data=data;
}
}
private Node root;
public Tree(){
this.root=construct();
display(this.root);
verticalOrder();
}
public Node construct()
{
int d=kb.nextInt();
Node nn=new Node(d);
LinkedList<Node> queue=new LinkedList<>();
queue.addFirst(nn);
while(!queue.isEmpty())
{
Node nr=queue.removeFirst();
int v1=kb.nextInt();
if(v1!=-1)
{ Node lf=new Node(v1);
nr.left=lf;
queue.addLast(lf); }
else
nr.left=null;
int v2=kb.nextInt();
if(v2!=-1)
{ Node ri=new Node(v2);
nr.right=ri;
queue.addLast(ri); }
else
nr.right=null;
}
return nn;
}
public void verticalOrder() {
HashMap<Integer,ArrayList> map = new HashMap<>();
verticalOrder(root, 0, 0, map);
ArrayList<Integer> keys = new ArrayList<>(map.keySet());
Collections.sort(keys); // [-2,-1,0,1,2]
for (int key : keys) {
ArrayList list = map.get(key);
Collections.sort(list, new VOComparator());
System.out.println(key + " -> " + list);
}
// System.out.println(map);
}
private void verticalOrder(Node node, int vLevel, int hLevel, HashMap<Integer,ArrayList> map) {
if (node==null)
return;
if (!map.containsKey(vLevel)) {
map.put(vLevel, new ArrayList<>());
}
VOPair np = new VOPair();
np.data = node.data;
np.hl = hLevel;
np.vl = vLevel;
map.get(vLevel).add(np);
verticalOrder(node.left, vLevel - 1, hLevel + 1, map);
verticalOrder(node.right, vLevel + 1, hLevel + 1, map);
}
public void display(Node nn)
{ if(nn==null)
return;
display(nn.left);
System.out.print(nn.data);
display(nn.right);
}
static Scanner kb=new Scanner(System.in);
public static void main(String args[]) {
int l=kb.nextInt();
Tree tr=new Tree();
}
}