Advertisement
asrivenki

BST - ReturnKClosestNodesToTarget

Nov 20th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.28 KB | None | 0 0
  1. package Tree.BinarySearchTree;
  2.  
  3. import Tree.Node;
  4.  
  5. import java.util.*;
  6.  
  7. public class ReturnKClosestNodesToTarget {
  8.  
  9.     static List<Integer> BSTTraverse(Node root, int target, int k) {
  10.         Queue<Integer> q = new ArrayDeque<>();
  11.         BSTTraverseHelper(root, target, k, q);
  12.  
  13.         List<Integer> res = new ArrayList<>();
  14.         while (!q.isEmpty()) {
  15.             res.add(q.poll());
  16.         }
  17.  
  18.         return res;
  19.     }
  20.  
  21.     static void BSTTraverseHelper(Node root, int target, int k, Queue<Integer> q) {
  22.         if(root != null) {
  23.             //Left
  24.             BSTTraverseHelper(root.left, target, k, q);
  25.  
  26.             //ROOT
  27.             int currDiff = Math.abs(root.data - target);
  28.             if(q.size() <k)
  29.                 q.offer(root.data);
  30.             else {
  31.                 int maxDiff = Math.abs(q.peek() - target);
  32.                 if(maxDiff > currDiff) {
  33.                     q.poll();
  34.                     q.offer(root.data);
  35.                 }
  36.             }
  37.  
  38.             //Right
  39.             BSTTraverseHelper(root.right, target, k, q);
  40.         }
  41.     }
  42.  
  43.     public static void main(String a[]) {
  44.         Node root = new BinarySearchTree().createTree(Arrays.asList( 2, 4, 3, 1, 6, 5, 7));
  45.         System.out.println(BSTTraverse(root, 6, 4));
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement