rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;
use rustgym_util::*;

trait Diameter {
    fn diameter(&self) -> i32;
    fn max_depth(&self, max: &mut i32) -> i32;
}

impl Diameter for TreeLink {
    fn diameter(&self) -> i32 {
        let mut max: i32 = 0;
        self.max_depth(&mut max);
        max
    }

    fn max_depth(&self, max: &mut i32) -> i32 {
        if let Some(node) = self {
            let node = node.borrow();
            let left = node.left.max_depth(max);
            let right = node.right.max_depth(max);
            *max = (*max).max(left + right);
            (left + 1).max(right + 1)
        } else {
            0
        }
    }
}

impl Solution {
    fn diameter_of_binary_tree(root: TreeLink) -> i32 {
        root.diameter()
    }
}

#[test]
fn test() {
    let root = tree!(1, tree!(2, tree!(4), tree!(5)), tree!(3));
    assert_eq!(Solution::diameter_of_binary_tree(root), 3);
}