Print bst range tree

why it give wrong answer???how to debug it
import java.util.*;
class Tree {

private class Node
{
	Node left;
	Node right;
	int data;
	public Node(int d)
	   {
		data=d;
	   }
}
private Node root;
private int size;

public Tree(int []arr)
{
this.root=bst(arr,0,arr.length-1);
}

public  Node bst(int []arr,int l,int h)
   {
       if(l>h)
	return null;

	int mid=(l+h)/2;
    
	Node n=new Node(arr[mid]);

	n.left=bst(arr,l,mid-1);
	n.right=bst(arr,mid+1,h);

      return n;
   }

public void print(int k1,int k2)
    {
		 this.printrange(this.root,k1,k2);
	}

public void display()
   {
	   this.preorder(this.root);
   }	

public static void preorder(Node node )
{
      if(node==null)
         return;

		 System.out.print(node.data+" ");
		 preorder(node.left);
		 preorder(node.right);

}
public static void printrange(Node node ,int k1,int k2)
    {
	    if(node==null)
		  return;

         if(node.data<k1)
		printrange(node.right,k1,k2);

		 else if(node.data>k2)
         printrange(node.left,k1,k2);

		 else{
		printrange(node.left,k1,k2);
		System.out.print(node.data+" ");
		printrange(node.right,k1,k2);	 

		 }
	}

public static void main(String args[]) {
    Scanner kb=new Scanner(System.in);
	
	int t=kb.nextInt();

	while(t-->0)
       {  
		 int n=kb.nextInt();
         int []arr=new int[n];

		 for(int i=0;i<n;i++)
		  arr[i]=kb.nextInt();
          
		  Arrays.sort(arr);

          Tree tr=new Tree(arr);
		  
		  int k1=kb.nextInt();
		  int k2=kb.nextInt();
          
		  tr.display();
		  System.out.println("");
		  tr.print(k1,k2);

		   System.out.println("");
	   }

}
}