Here is my code . 2 test cases are failing . Can you tell me , where did I go wrong ?
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in) ;
int n = scan.nextInt() ;
int[] pre = new int[n] ;
for(int i = 0 ; i < n ; i ++){
pre[i] = scan.nextInt() ;
}
int[] in = new int[n] ;
for(int i =0 ; i < n ; i ++){
in[i] = scan.nextInt() ;
}
BinaryTree tree = new BinaryTree(pre,in) ;
int t = scan.nextInt() ;
while(t – > 0){
int data = scan.nextInt() ;
int k = scan.nextInt() ;
tree.kDistAway(data,k) ;
System.out.println() ;
}
}
}
class BinaryTree{
private class Node{
int data ;
Node left ;
Node right ;
Node(int data){
this.data = data ;
}
}
private Node root ;
BinaryTree(int[] pre , int[] in){
root = construct(pre,0,pre.length-1,in,0,in.length-1) ;
}
private Node construct(int[] pre , int plo , int phi , int[] in , int ilo , int ihi){
if(plo > phi || ilo > ihi){
return null ;
}
Node nn = new Node(pre[plo]) ;
int si = -1 , nel = 0 ;
for(int i = ilo ; i <= ihi ; i ++){
if(in[i] == pre[plo]){
si = i ;
break ;
}
nel ++ ;
}
nn.left = construct(pre,plo+1,plo+nel,in,ilo,si-1) ;
nn.right = construct(pre,plo+nel+1,phi,in,si+1,ihi) ;
return nn ;
}
public void kDistAway(int data , int k){
kDistAway(root,data,k) ;
}
private void kDistAway(Node root , int data , int k){
ArrayList<Node> path = nodeToRootPath(root,data) ;
int[] exec = new int[1] ;
for(int i = 0 ; i < path.size() ; i ++){
printKDist(path.get(i), k-i , i==0 ? null : path.get(i-1),exec) ;
}
if(exec[0] == 0){
System.out.print(0) ;
}
}
private ArrayList<Node> nodeToRootPath(Node root , int data){
ArrayList<Node> path = new ArrayList<>() ;
helper(root,data,path) ;
return path ;
}
public boolean helper(Node root , int data , ArrayList<Node> al){
if(root == null){
return false ;
}
if(root.data == data){
al.add(root) ;
return true ;
}
boolean l = helper(root.left,data,al) ;
if(l){
al.add(root) ;
return true ;
}
boolean r = helper(root.right,data,al) ;
if(r){
al.add(root) ;
return true ;
}
return false ;
}
private void printKDist(Node root , int k , Node blocker ,int[] exec){
if(root == null || k < 0 || root == blocker){
return ;
}
if(k == 0){
exec[0] = 1 ;
System.out.print(root.data+" ") ;
return ;
}
printKDist(root.left,k-1,blocker,exec) ;
printKDist(root.right,k-1,blocker,exec) ;
}
}