Doubt regarding print all nodes at distance k form a given node problem

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

}

@Lalit2142 hey buddy, give a read here
On T lines print space separated desired output for each test case in sorted form
Instead of printing just used arraylist and sorted it, rest ya code is same!


And good job bro!
Close the doubt by marking it resolved.
Happy coding!