-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patha0617_merge_two_binary_trees.rs
72 lines (63 loc) · 1.58 KB
/
a0617_merge_two_binary_trees.rs
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
65
66
67
68
69
70
71
72
/*
* [0617] merge-two-binary-trees
*/
pub struct Solution {}
use super::utils::tree::TreeNode;
// solution impl starts here
// Definition for a binary tree node.
// #[derive(Debug, PartialEq, Eq)]
// pub struct TreeNode {
// pub val: i32,
// pub left: Option<Rc<RefCell<TreeNode>>>,
// pub right: Option<Rc<RefCell<TreeNode>>>,
// }
//
// impl TreeNode {
// #[inline]
// pub fn new(val: i32) -> Self {
// TreeNode {
// val,
// left: None,
// right: None
// }
// }
// }
use std::cell::RefCell;
use std::rc::Rc;
impl Solution {
pub fn merge_trees(
t1: Option<Rc<RefCell<TreeNode>>>,
t2: Option<Rc<RefCell<TreeNode>>>,
) -> Option<Rc<RefCell<TreeNode>>> {
if t1.is_none() {
return t2;
}
if t2.is_none() {
return t1;
}
let b1 = t1.unwrap();
let b1 = b1.borrow();
let b2 = t2.unwrap();
let b2 = b2.borrow();
Some(Rc::new(RefCell::new(TreeNode {
val: b1.val + b2.val,
left: Solution::merge_trees(b1.left.clone(), b2.left.clone()),
right: Solution::merge_trees(b1.right.clone(), b2.right.clone()),
})))
}
}
// solution impl ends here
// solution tests starts here
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_case0() {
assert_eq!(Solution::merge_trees(tree![1], tree![2]), tree![3]);
assert_eq!(
Solution::merge_trees(tree![1, 3, 2, 5], tree![2, 1, 3, null, 4, null, 7]),
tree![3, 4, 5, 5, 4, null, 7]
);
}
}
// solution tests ends here