2476. 二叉搜索树最近节点查询

func closestNodes(root *TreeNode, queries []int) [][]int {
var arr []int
var dfs func(root *TreeNode)
dfs = func(root *TreeNode) {
if root == nil {
return
}
dfs(root.Left)
arr = append(arr, root.Val)
dfs(root.Right)
}
dfs(root)
ans := make([][]int, len(queries))
for i, query := range queries {
ans[i] = []int{-1, -1}
max := maxi(arr, query)
if max != len(arr) {
ans[i][1] = arr[max]
}
if max == len(arr) || arr[max] != query {
min := max - 1
if min >= 0 {
ans[i][0] = arr[min]
}
} else {
ans[i][0] = arr[max]
}
}
return ans
}
func maxi(arr []int, query int) int {
l, r := 0, len(arr)-1
for l <= r {
mid := l + (r-l)/2
if arr[mid] < query {
l = mid + 1
} else {
r = mid - 1
}
}
return l
}