>>101564776
I don't know Microsoft Java, so here is Oracle java instead.
import java.util.List;
import java.util.Arrays;
import java.util.OptionalInt;
import java.util.stream.Collectors;
public class Solution {
/* All of the boilerplate that would've been on leetcode's side */
static 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 static void main(String args[]) {
var tree1 =
new TreeNode(6,
new TreeNode(2,
new TreeNode(1),
new TreeNode(4)
),
new TreeNode(13,
new TreeNode(9),
new TreeNode(15,
new TreeNode(14),
null
)
)
);
var query1 = Arrays.asList(2, 5, 16);
printResult(closestNodes(tree1, query1));
}
public static void printResult(List<List<Integer>> result) {
System.out.println("[" + result
.stream()
.map(r -> "[" + r
.stream()
.map(Object::toString)
.collect(Collectors.joining(",")) + "]"
)
.collect(Collectors.joining(",")) + "]"
);
}
/* Actual solution */
public static List<List<Integer>> closestNodes(TreeNode root, List<Integer> queries) {
return queries.stream()
.map(n -> walk(n, root, OptionalInt.empty(), OptionalInt.empty()))
.collect(Collectors.toList());
}
public static List<Integer> walk(int query, TreeNode node, OptionalInt less, OptionalInt greater) {
if (node == null) {
return Arrays.asList(less.orElse(-1), greater.orElse(-1));
} else if (query < node.val) {
return walk(query, node.left, less, OptionalInt.of(node.val));
} else if (query > node.val) {
return walk(query, node.right, OptionalInt.of(node.val), greater);
} else {
return Arrays.asList(query, query);
}
}
}