leetcode_rust/
smallest_string_starting_from_leaf.rs

1#![allow(dead_code)]
2
3// todo
4
5//use std::cell::RefCell;
6//use std::rc::Rc;
7//
8//use crate::binary_tree::TreeNode;
9
10//pub fn smallest_from_leaf(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
11//    let s = preorder_traversal(root);
12//    let min_val = s.iter().min_by(|&a, &b| (*a).0.cmp(&(*b).0));
13//
14//    (*min_val.unwrap()).1.borrow().val
15//}
16//
17//pub fn preorder_traversal(
18//    root: Option<Rc<RefCell<TreeNode>>>,
19//) -> Vec<(i32, Rc<RefCell<TreeNode>>)> {
20//    let mut res: Vec<(i32, Rc<RefCell<TreeNode>>)> = vec![];
21//    preorder(root, &mut res);
22//    res
23//}
24//
25//fn preorder(root: Option<Rc<RefCell<TreeNode>>>, mut res: &mut Vec<(i32, Rc<RefCell<TreeNode>>)>) {
26//    match root {
27//        None => {}
28//        Some(node) => {
29//            preorder(node.borrow().left.clone(), &mut res);
30//            preorder(node.borrow().right.clone(), &mut res);
31//            match (node.borrow().left, node.borrow().right) {
32//                (None, None) => {
33//                    let val = (node.borrow().val, node.clone());
34//                    res.push(val);
35//                }
36//
37//                _ => {}
38//            }
39//        }
40//    }
41//}
42//
43//#[cfg(test)]
44//mod tests {
45//    use super::*;
46//
47//    #[test]
48//    fn test1() {
49//        let tree = Some(Rc::new(RefCell::new(TreeNode {
50//            val: 1,
51//            left: None,
52//            right: Some(Rc::new(RefCell::new(TreeNode {
53//                val: 2,
54//                left: Some(Rc::new(RefCell::new(TreeNode {
55//                    val: 3,
56//                    left: None,
57//                    right: None,
58//                }))),
59//                right: None,
60//            }))),
61//        })));
62//        assert_eq!(smallest_from_leaf(tree), 1);
63//    }
64//}