import java.util.*;
class Node{
int key;
Node lChild;
Node rChild;
Node(int key){
this.key=key;
this.lChild=null;
this.rChild=null;
}
}
class BSTree{
Node root;
public Node insert(int key, Node root){
if(root==null){
return new Node(key);
} else{
if(key>root.key){
root.rChild=insert(key,root.rChild);
}
else{
root.lChild=insert(key,root.lChild);
}
}
return root;
}
public void inOrderTraversal(Node root){
if(root==null)
return ;
inOrderTraversal(root.lChild);
System.
out.
print(root.
key+" "); inOrderTraversal(root.rChild);
}
}
class PrintAllNodeWhichAreKDistanceFromLeaf{
public static void main
(String []args
){ Scanner scan
=new Scanner
(System.
in); BSTree rootNode=new BSTree();
rootNode.root=null;
int size=scan.nextInt();// size of BSTree
for(int i=0;i<size;i++){
int data=scan.nextInt(); // take root value
rootNode.root=rootNode.insert(data,rootNode.root);// insert node in bst
}
// K is the distance
int K=scan.nextInt();
//rootNode.inOrderTraversal(rootNode.root);
System.
out.
println("\nNodes which are at K distance"); printNodesAtKDistanceFromLeaf(rootNode.root,K,size);
}
public static void printNodesAtKDistanceFromLeaf(Node root, int K, int size){
int [] path=new int[size];
printNodesAtDistanceUtil(root,K,0,path);
return;
}
public static void printNodesAtDistanceUtil(Node root,int k, int len, int [] path){
if(root==null)
return;
path[len]=root.key;
len++;
if(root.lChild==null && root.rChild==null && len-k-1>=0){
System.
out.
print(path
[len
-k
-1]+" "); return;
}
printNodesAtDistanceUtil(root.lChild,k,len,path);
printNodesAtDistanceUtil(root.rChild,k,len,path);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwpjbGFzcyBOb2RlewogICAgaW50IGtleTsKICAgIE5vZGUgbENoaWxkOwogICAgTm9kZSByQ2hpbGQ7CiAgICBOb2RlKGludCBrZXkpewogICAgICAgICB0aGlzLmtleT1rZXk7CiAgICAgICAgIHRoaXMubENoaWxkPW51bGw7CiAgICAgICAgIHRoaXMuckNoaWxkPW51bGw7CiAgICB9Cn0KY2xhc3MgQlNUcmVlewogICAgTm9kZSByb290OyAgICAKICAgIHB1YmxpYyBOb2RlIGluc2VydChpbnQga2V5LCBOb2RlIHJvb3QpewogICAgICAgIGlmKHJvb3Q9PW51bGwpeyAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBuZXcgTm9kZShrZXkpOwogICAgICAgIH0gZWxzZXsgICAgICAgICAgIAogICAgICAgICAgICBpZihrZXk+cm9vdC5rZXkpewogICAgICAgICAgICAgICAgcm9vdC5yQ2hpbGQ9aW5zZXJ0KGtleSxyb290LnJDaGlsZCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgcm9vdC5sQ2hpbGQ9aW5zZXJ0KGtleSxyb290LmxDaGlsZCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvb3Q7CiAgICB9CiAgICBwdWJsaWMgdm9pZCBpbk9yZGVyVHJhdmVyc2FsKE5vZGUgcm9vdCl7CiAgICAgICAgaWYocm9vdD09bnVsbCkKICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICBpbk9yZGVyVHJhdmVyc2FsKHJvb3QubENoaWxkKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHJvb3Qua2V5KyIgIik7CiAgICAgICAgaW5PcmRlclRyYXZlcnNhbChyb290LnJDaGlsZCk7CiAgICB9Cn0KY2xhc3MgUHJpbnRBbGxOb2RlV2hpY2hBcmVLRGlzdGFuY2VGcm9tTGVhZnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXWFyZ3MpewogICAgICAgIFNjYW5uZXIgc2Nhbj1uZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAgICAgIEJTVHJlZSByb290Tm9kZT1uZXcgQlNUcmVlKCk7CiAgICAgICAgcm9vdE5vZGUucm9vdD1udWxsOwogICAgICAgIGludCBzaXplPXNjYW4ubmV4dEludCgpOy8vIHNpemUgb2YgQlNUcmVlCiAgICAgICAgCiAgICAgICAgZm9yKGludCBpPTA7aTxzaXplO2krKyl7CiAgICAgICAgICAgIGludCBkYXRhPXNjYW4ubmV4dEludCgpOyAgLy8gdGFrZSByb290IHZhbHVlICAgICAgICAgIAogICAgICAgICAgICByb290Tm9kZS5yb290PXJvb3ROb2RlLmluc2VydChkYXRhLHJvb3ROb2RlLnJvb3QpOy8vIGluc2VydCBub2RlIGluIGJzdAogICAgICAgIH0gIAogICAgICAgIC8vIEsgaXMgdGhlIGRpc3RhbmNlIAogICAgICAgIGludCBLPXNjYW4ubmV4dEludCgpOwogICAgICAgIC8vcm9vdE5vZGUuaW5PcmRlclRyYXZlcnNhbChyb290Tm9kZS5yb290KTsgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbk5vZGVzIHdoaWNoIGFyZSBhdCBLIGRpc3RhbmNlIik7CiAgICAgICAgcHJpbnROb2Rlc0F0S0Rpc3RhbmNlRnJvbUxlYWYocm9vdE5vZGUucm9vdCxLLHNpemUpOwogICAgfQogICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50Tm9kZXNBdEtEaXN0YW5jZUZyb21MZWFmKE5vZGUgcm9vdCwgaW50IEssIGludCBzaXplKXsKICAgICAgICBpbnQgW10gcGF0aD1uZXcgaW50W3NpemVdOwogICAgICAgIHByaW50Tm9kZXNBdERpc3RhbmNlVXRpbChyb290LEssMCxwYXRoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnROb2Rlc0F0RGlzdGFuY2VVdGlsKE5vZGUgcm9vdCxpbnQgaywgaW50IGxlbiwgaW50IFtdIHBhdGgpewogICAgICAgIGlmKHJvb3Q9PW51bGwpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBwYXRoW2xlbl09cm9vdC5rZXk7CiAgICAgICAKICAgICAgICBsZW4rKzsKICAgICAgICBpZihyb290LmxDaGlsZD09bnVsbCAmJiByb290LnJDaGlsZD09bnVsbCAgJiYgbGVuLWstMT49MCl7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQocGF0aFtsZW4tay0xXSsiICIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHByaW50Tm9kZXNBdERpc3RhbmNlVXRpbChyb290LmxDaGlsZCxrLGxlbixwYXRoKTsKICAgICAgICBwcmludE5vZGVzQXREaXN0YW5jZVV0aWwocm9vdC5yQ2hpbGQsayxsZW4scGF0aCk7CiAgICB9Cn0K