1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#![allow(dead_code)]

// todo

//use std::cell::RefCell;
//use std::rc::Rc;
//
//use crate::binary_tree::TreeNode;

//pub fn smallest_from_leaf(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
//    let s = preorder_traversal(root);
//    let min_val = s.iter().min_by(|&a, &b| (*a).0.cmp(&(*b).0));
//
//    (*min_val.unwrap()).1.borrow().val
//}
//
//pub fn preorder_traversal(
//    root: Option<Rc<RefCell<TreeNode>>>,
//) -> Vec<(i32, Rc<RefCell<TreeNode>>)> {
//    let mut res: Vec<(i32, Rc<RefCell<TreeNode>>)> = vec![];
//    preorder(root, &mut res);
//    res
//}
//
//fn preorder(root: Option<Rc<RefCell<TreeNode>>>, mut res: &mut Vec<(i32, Rc<RefCell<TreeNode>>)>) {
//    match root {
//        None => {}
//        Some(node) => {
//            preorder(node.borrow().left.clone(), &mut res);
//            preorder(node.borrow().right.clone(), &mut res);
//            match (node.borrow().left, node.borrow().right) {
//                (None, None) => {
//                    let val = (node.borrow().val, node.clone());
//                    res.push(val);
//                }
//
//                _ => {}
//            }
//        }
//    }
//}
//
//#[cfg(test)]
//mod tests {
//    use super::*;
//
//    #[test]
//    fn test1() {
//        let tree = Some(Rc::new(RefCell::new(TreeNode {
//            val: 1,
//            left: None,
//            right: Some(Rc::new(RefCell::new(TreeNode {
//                val: 2,
//                left: Some(Rc::new(RefCell::new(TreeNode {
//                    val: 3,
//                    left: None,
//                    right: None,
//                }))),
//                right: None,
//            }))),
//        })));
//        assert_eq!(smallest_from_leaf(tree), 1);
//    }
//}