rustgym 0.2.0

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

use std::collections::VecDeque;

impl Solution {
    fn is_even_odd_tree(root: TreeLink) -> bool {
        let mut queue: VecDeque<TreeLink> = VecDeque::new();
        let mut level = 0;
        queue.push_back(root);
        while !queue.is_empty() {
            let n = queue.len();
            let mut nodes = vec![];
            for _ in 0..n {
                if let Some(node) = queue.pop_front().unwrap() {
                    let mut node = node.borrow_mut();
                    nodes.push(node.val);
                    queue.push_back(node.left.take());
                    queue.push_back(node.right.take());
                }
            }
            if nodes.iter().any(|&x| x % 2 == level % 2) {
                return false;
            }
            if nodes
                .windows(2)
                .any(|w| (level % 2 == 0 && w[0] >= w[1]) || (level % 2 == 1 && w[0] <= w[1]))
            {
                return false;
            }
            level += 1;
        }
        true
    }
}

#[test]
fn test() {
    let root = tree!(
        1,
        tree!(10, tree!(3, tree!(12), tree!(8)), None),
        tree!(4, tree!(7, tree!(6), None), tree!(9, None, tree!(2)))
    );
    let res = true;
    assert_eq!(Solution::is_even_odd_tree(root), res);
    let root = tree!(5, tree!(9, tree!(3), tree!(5)), tree!(1, tree!(7), None));
    let res = false;
    assert_eq!(Solution::is_even_odd_tree(root), res);
    let root = tree!(5, tree!(4, tree!(3), tree!(3)), tree!(2, tree!(7), None));
    let res = false;
    assert_eq!(Solution::is_even_odd_tree(root), res);
}