class TreeSearch {
   
   public static void main(String[] args) {
      TreeNode<Integer> t1 = new TreeNode<Integer>(1, null, null);
      TreeNode<Integer> t13 = new TreeNode<Integer>(13, null, null);
      TreeNode<Integer> t29 = new TreeNode<Integer>(29, null, null);
      TreeNode<Integer> t48 = new TreeNode<Integer>(48, null, null);
      TreeNode<Integer> t91 = new TreeNode<Integer>(91, null, null);
      TreeNode<Integer> t20 = new TreeNode<Integer>(20, t13, null);
      TreeNode<Integer> t54 = new TreeNode<Integer>(54, t48, null);
      TreeNode<Integer> t80 = new TreeNode<Integer>(80, t54, t91);
      TreeNode<Integer> t6 = new TreeNode<Integer>(6, t1, t20);
      TreeNode<Integer> t47 = new TreeNode<Integer>(47, t29, t80);
      TreeNode<Integer> t25 = new TreeNode<Integer>(25, t6, t47);
      for (int i = 0; i < 100; i++) {
         if (treeSearch(i,t25)) System.out.print(i + " ");
      }
      System.out.println();
   }
   
   static boolean treeSearch(Comparable x, TreeNode t) {
      if (t == null) return false;
      switch (x.compareTo(t.data)) {
         case 0: return true; //found
         case 1: return treeSearch(x, t.right);
         default: return treeSearch(x, t.left);
      }
   }
}

class TreeNode<T extends Comparable> {
   TreeNode<T> left = null;
   TreeNode<T> right = null;
   T data;
   
   TreeNode(T data, TreeNode<T> left, TreeNode<T> right) {
      this.data = data;
      this.left = left;
      this.right = right;
   }
}
   