xxx Find the k closest elements in the binary search tree
Solution)
By inorder traversing, we can keep the array which size is k and then update the array based on the absolute distance.
public class TreeNode {
int val;
TreeNode left, right;
public TreeNode(int val) {
this.val = val;
this.left = this.right = null;
}
}
public void helper(TreeNode node, int k, int x, List<Integer> result) {
if (node == null) return;
// inorder traversing
helper(node.left, k, x, result);
if (result.length < k) result.add(node.val);
else if (Math.abs(result.get(0)-x) > Math.abs(node.val-x)) {
result.remove(0);
result.add(node.val);
}
helper(node.right, k, x, result);
}
public List<Integer> findKClosestBST(TreeNode root, int k, int x) {
List<Integer> result = new ArrayList<>();
helper(root, k, x, result);
return result;
}