rustgym/leetcode/
_102_binary_tree_level_order_traversal.rs1struct 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}