package com.interview.tree; /** * http://www.geeksforgeeks.org/print-nodes-distance-k-given-node-binary-tree/ * Test case * k should not be negative * k could be very big number which means nothing was found * dest might/might not exists in the tree * root could be null */ public class NodesAtDistanceK { private void findInChild(Node root, int k){ if(root == null){ return; } if(k == 0){ System.out.println(root.data); } findInChild(root.left, k-1); findInChild(root.right, k-1); } public int printNodes(Node root,int dest, int k){ if(root == null){ return -1; } if(root.data == dest){ findInChild(root, k); return k-1; } int found = printNodes(root.left,dest,k); if(found != -1){ if(found == 0){ System.out.println(root.data); }else{ findInChild(root.right, found-1); } return found -1; } found = printNodes(root.right,dest,k); if(found != -1){ if(found == 0){ System.out.println(root.data); }else{ findInChild(root.left, found-1); } return found-1; } return -1; } public static void main(String args[]){ NodesAtDistanceK nad = new NodesAtDistanceK(); Node root = null; BinaryTree bt = new BinaryTree(); root = bt.addNode(10, root); root = bt.addNode(3, root); root = bt.addNode(-1, root); root = bt.addNode(8, root); root = bt.addNode(-6, root); root = bt.addNode(-11, root); root = bt.addNode(18, root); root = bt.addNode(11, root); root = bt.addNode(13, root); root = bt.addNode(26, root); root = bt.addNode(27, root); nad.printNodes(root, 11, 2); } }