95. Unique Binary Search Trees II
Given an integer n
, return all the structurally unique BST's (binary search trees), which has exactly n
nodes of unique values from 1
to n
. Return the answer in any order.
Example 1:

Input: n = 3 Output: [[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
Example 2:
Input: n = 1 Output: [[1]]
Constraints:
1 <= n <= 8
Rust Solution
struct Solution;
use rustgym_util::*;
impl Solution {
fn generate_trees(n: i32) -> Vec<TreeLink> {
if n == 0 {
return vec![];
}
Self::generate(1, n)
}
fn generate(left: i32, right: i32) -> Vec<TreeLink> {
let mut res = vec![];
if left > right {
return vec![None];
}
if left == right {
return vec![tree!(left)];
}
for middle in left..=right {
for i in Self::generate(left, middle - 1) {
for j in Self::generate(middle + 1, right) {
res.push(tree!(middle, i.clone(), j));
}
}
}
res
}
}
#[test]
fn test() {
let n = 3;
let mut res = vec![
tree!(1, None, tree!(3, tree!(2), None)),
tree!(3, tree!(2, tree!(1), None), None),
tree!(3, tree!(1, None, tree!(2)), None),
tree!(2, tree!(1), tree!(3)),
tree!(1, None, tree!(2, None, tree!(3))),
];
let mut ans = Solution::generate_trees(n);
ans.sort();
res.sort();
assert_eq!(ans, res);
}
Having problems with this solution? Click here to submit an issue on github.