Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Tree.BinarySearchTree;
- import Tree.Node;
- import java.util.*;
- public class ReturnKClosestNodesToTarget {
- static List<Integer> BSTTraverse(Node root, int target, int k) {
- Queue<Integer> q = new ArrayDeque<>();
- BSTTraverseHelper(root, target, k, q);
- List<Integer> res = new ArrayList<>();
- while (!q.isEmpty()) {
- res.add(q.poll());
- }
- return res;
- }
- static void BSTTraverseHelper(Node root, int target, int k, Queue<Integer> q) {
- if(root != null) {
- //Left
- BSTTraverseHelper(root.left, target, k, q);
- //ROOT
- int currDiff = Math.abs(root.data - target);
- if(q.size() <k)
- q.offer(root.data);
- else {
- int maxDiff = Math.abs(q.peek() - target);
- if(maxDiff > currDiff) {
- q.poll();
- q.offer(root.data);
- }
- }
- //Right
- BSTTraverseHelper(root.right, target, k, q);
- }
- }
- public static void main(String a[]) {
- Node root = new BinarySearchTree().createTree(Arrays.asList( 2, 4, 3, 1, 6, 5, 7));
- System.out.println(BSTTraverse(root, 6, 4));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement