Largest BST in a Binary tree

whats the error in my code ???

import java.util.*;
public class Main {

static Scanner scn = new Scanner(System.in);

public static void main(String[] args) {
    Main m = new Main();
    int n=scn.nextInt();
    int[] pre = takeInput(n);
    int[] in = takeInput(n);
    BinaryTree bt = m.new BinaryTree(pre, in);
    //bt.display();

    //bt.largestBST();

}

public static int[] takeInput(int n) {

    int[] rv = new int[n];
    for (int i = 0; i < rv.length; i++) {
        rv[i] = scn.nextInt();
    }

    return rv;
}

private class BinaryTree {
    private class Node {
        int data;
        Node left;
        Node right;
        boolean t;
    }

    private Node root;
    private int size;

    public BinaryTree(int[] pre, int[] in) {
        this.root = this.construct(pre, 0, pre.length - 1, in, 0, in.length - 1);
        pair p=largestBST(this.root);
        System.out.println(p.size);
    }

    private Node construct(int[] pre, int plo, int phi, int[] in, int ilo, int ihi) {
        // write your code here
        Node n=new Node();
        n.data=pre[plo];
        int x=0;
        for(int i=ilo;i<=ihi;i++){
            if(in[i]==n.data)
                x=i;
        }
        if(x<=ihi && x>=ilo && plo+1<=phi){
            n.left=construct(pre,plo+1,x,in,ilo,x-1);
        }
        if(x>=ilo && x<=ihi && plo+1+x<=phi){
            n.right=construct(pre,plo+1+x,phi,in,x+1,ihi);
        }
        return n;
    }

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

    private void display(Node node) {
        if (node == null) {
            return;
        }

        String str = "";

        if (node.left != null) {
            str += node.left.data;
        } else {
            str += "END";
        }

        str += " => " + node.data + " <= ";

        if (node.right != null) {
            str += node.right.data;
        } else {
            str += "END";
        }

        System.out.println(str);

        this.display(node.left);
        this.display(node.right);
    }

    private class pair{
        Boolean t;
        int max;
        int min;
        int size;
        pair(boolean b,int ma,int mi,int si){
            t=b;
            max=ma;
            min=mi;
            size=si;
        }
    }
    private pair largestBST(Node n){
        if(n==null){
            return new pair(true,Integer.MIN_VALUE,Integer.MAX_VALUE,0);
        }

      pair p1;
      pair p2;
        //System.out.println("**");
      p1=largestBST(n.left);
      p2=largestBST(n.right);

      pair p=new pair(true,Integer.MIN_VALUE,Integer.MAX_VALUE,0);

      if(p1.t==false || p2.t==false || (p1.max>=n.data || p2.min<=n.data)){
          p.t=false;
          p.size=Math.max(p1.size,p2.size);
          return p;
      }

        p.t=true;
        p.size=p1.size+p2.size+1;
        if(n.right==null){
            p.max=n.data;
        }
        else{
            p.max=p2.max;
        }

        if(n.left==null){
            p.min=n.data;
        }
        else{
            p.min=p1.min;
        }
       // System.out.println(n.data+" "+p.t+" "+p.max+" "+p.min);
      return p;
    }



}

}

hey @Anubhav44044
try for this input
7
20 8 4 12 10 14 22
4 8 10 12 14 20 22
correct output : 7
your code gives 6