rustgym/leetcode/
_102_binary_tree_level_order_traversal.rs

1struct Solution;
2use rustgym_util::*;
3
4trait Preorder {
5    fn preorder(&self, levels: &mut Vec<Vec<i32>>, level: usize);
6}
7
8impl Preorder for TreeLink {
9    fn preorder(&self, levels: &mut Vec<Vec<i32>>, level: usize) {
10        if let Some(node) = self {
11            let val = node.borrow().val;
12            if levels.len() == level {
13                levels.push(vec![val]);
14            } else {
15                levels[level].push(val);
16            }
17            node.borrow().left.preorder(levels, level + 1);
18            node.borrow().right.preorder(levels, level + 1);
19        }
20    }
21}
22
23impl Solution {
24    fn level_order(root: TreeLink) -> Vec<Vec<i32>> {
25        let mut res = vec![];
26        root.preorder(&mut res, 0);
27        res
28    }
29}
30
31#[test]
32fn test() {
33    let root = tree!(3, tree!(9), tree!(20, tree!(15), tree!(7)));
34    let res: Vec<Vec<i32>> = vec_vec_i32![[3], [9, 20], [15, 7]];
35    assert_eq!(Solution::level_order(root), res);
36}