rustgym 0.2.0

rustgym solutions
Documentation
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);
}