# 272 Closest Binary Search Tree Value II

## 272. Closest Binary Search Tree Value II

## 1. Question

Given a non-empty binary search tree and a target value, findkvalues in the BST that are closest to the target.

**Note:**

* Given target value is a floating point.
* You may assume k is always valid, that is: k ≤ total nodes.
* You are guaranteed to have only one unique set of k values in the BST that are closest to the target.
* **Follow up:** &#x20;

  Assume that the BST is balanced, could you solve it in less thanO(n) runtime (wheren= total nodes)?

## 2. Implementation

方法一： Inorder traversal

思路： 维护一个size为k的list，对树进行中序遍历，如果list的size等于k, 则比较list的第一个元素和当前node的值哪个更加接近target

```java
class Solution {
    public List<Integer> closestKValues(TreeNode root, double target, int k) {
        LinkedList<Integer> res = new LinkedList<>();

        if (root == null) {
            return res;
        }

        Stack<TreeNode> stack = new Stack<>();
        TreeNode curNode = root;

        while (curNode != null || !stack.isEmpty()) {
            if (curNode != null) {
               stack.push(curNode);
               curNode = curNode.left;
            }
            else {
                curNode = stack.pop();

                if (res.size() < k) {
                    res.add(curNode.val);
                }
                else if (Math.abs(curNode.val - target) < Math.abs(res.getFirst() - target)) {
                    res.removeFirst();
                    res.add(curNode.val);
                }
                curNode = curNode.right;
            }
        }
        return res;
    }
}
```

## 3. Time & Space Complexity

时间和空间都是O(n)
