extern crate cauly_rust_leetcode_utils;
use cauly_rust_leetcode_utils::binary_tree::*;
#[test]
fn test1() {
let result = TreeNode::from_string("1").unwrap();
assert_eq!(1, result.borrow().val);
}
#[test]
fn test2() {
let result = TreeNode::from_string("1,2,3");
result.walk(TraversalType::Inorder, |mut x| {
x.set_val(x.get_val().unwrap() + 1)
});
assert_eq!(Some(2), result.get_val());
assert_eq!(Some(3), result.get_left().get_val());
assert_eq!(Some(4), result.get_right().get_val());
}
#[test]
fn test3() {
let result = TreeNode::from_string("1,null,3,4,5");
assert_eq!(Some(1), result.get_val());
assert_eq!(None, result.get_left());
assert_eq!(Some(3), result.get_right().get_val());
assert_eq!(Some(4), result.get_right().get_left().get_val());
assert_eq!(Some(5), result.get_right().get_right().get_val());
}
#[test]
fn test4() {
let result = TreeNode::from_string("1,null,null");
assert_eq!(Some(1), result.get_val());
assert_eq!(None, result.get_left());
assert_eq!(None, result.get_right());
}
#[test]
fn test5() {
let result = TreeNode::from_string("1,2,3,4,5");
let sum = result.aggregate(
|n| n.get_val().unwrap_or(0),
|v, l, r| Some(v + l.unwrap_or(0) + r.unwrap_or(0)),
);
assert_eq!(Some(1 + 2 + 3 + 4 + 5), sum);
}
#[test]
fn test6() {
let result = TreeNode::from_string("1,2,3");
let mut v = Vec::new();
result.walk_t(TraversalType::Inorder, &mut v, |v, x| match x.get_val() {
Some(i) => v.push(i),
_ => (),
});
assert_eq!(vec![2, 1, 3], v);
}
#[test]
fn test7() {
let result = TreeNode::from_string("1,null,2,3");
assert_eq!(Some(3), result.get_right().get_left().get_val());
}
#[test]
fn test8() {
let result = TreeNode::from_string("1,null,2,3");
let mut count = 0;
let sum = result.aggregate_t(
&mut count,
|_, node| node.get_val().unwrap_or(0),
|count, val, lval, rval| {
*count += 1;
Some(val + lval.unwrap_or(0) + rval.unwrap_or(0))
},
);
assert_eq!(3, count);
assert_eq!(Some(6), sum);
}