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;
}
}
}