Medium
You are given the root of a binary search tree and an array queries of size n consisting of positive integers.
Find a 2D array answer of size n where answer[i] = [mini, maxi]:
mini is the largest value in the tree that is smaller than or equal to queries[i]. If a such value does not exist, add -1 instead.maxi is the smallest value in the tree that is greater than or equal to queries[i]. If a such value does not exist, add -1 instead.Return the array answer.
Example 1:

Input: root = [6,2,13,1,4,9,15,null,null,null,null,null,null,14], queries = [2,5,16]
Output: [[2,2],[4,6],[15,-1]]
Explanation: We answer the queries in the following way:
Example 2:

Input: root = [4,null,9], queries = [3]
Output: [[-1,4]]
Explanation: The largest number that is smaller or equal to 3 in the tree does not exist, and the smallest number that is greater or equal to 3 is 4. So the answer for the query is [-1,4].
Constraints:
[2, 105].1 <= Node.val <= 106n == queries.length1 <= n <= 1051 <= queries[i] <= 106import com_github_leetcode.TreeNode;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
/*
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
public class Solution {
    private final TreeSet<Integer> set = new TreeSet<>();
    private void traverse(TreeNode root) {
        if (root == null) {
            return;
        }
        traverse(root.left);
        set.add(root.val);
        traverse(root.right);
    }
    public List<List<Integer>> closestNodes(TreeNode root, List<Integer> queries) {
        traverse(root);
        List<List<Integer>> ans = new ArrayList<>();
        for (int q : queries) {
            List<Integer> list = new ArrayList<>();
            Integer min = set.floor(q);
            if (min != null) {
                list.add(min);
            } else {
                list.add(-1);
            }
            Integer max = set.ceiling(q);
            if (max != null) {
                list.add(max);
            } else {
                list.add(-1);
            }
            ans.add(list);
        }
        return ans;
    }
}