leetcode_rust/
binary_tree_preorder_traversal.rs1#![allow(dead_code)]
2
3use std::cell::RefCell;
4use std::rc::Rc;
5
6use crate::binary_tree::TreeNode;
7
8pub fn preorder_traversal(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
9 let mut res = vec![];
10 preorder(root, &mut res);
11 res
12}
13
14fn preorder(root: Option<Rc<RefCell<TreeNode>>>, mut res: &mut Vec<i32>) {
15 match root {
16 None => {}
17 Some(node) => {
18 res.push(node.borrow().val);
19 preorder(node.borrow().left.clone(), &mut res);
20 preorder(node.borrow().right.clone(), &mut res);
21 }
22 }
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn test1() {
31 let tree = Some(Rc::new(RefCell::new(TreeNode {
32 val: 1,
33 left: None,
34 right: Some(Rc::new(RefCell::new(TreeNode {
35 val: 2,
36 left: Some(Rc::new(RefCell::new(TreeNode {
37 val: 3,
38 left: None,
39 right: None,
40 }))),
41 right: None,
42 }))),
43 })));
44 let res = preorder_traversal(tree);
45 assert_eq!(res, vec![1, 2, 3]);
46 }
47}