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;
}

results matching ""

    No results matching ""