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);
// }
//}