Guest User

Untitled

a guest
Jan 17th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. #[derive(Debug, PartialEq, Eq)]
  2. pub struct TreeNode {
  3. pub val: i32,
  4. pub left: Option<Rc<RefCell<TreeNode>>>,
  5. pub right: Option<Rc<RefCell<TreeNode>>>,
  6. }
  7.  
  8. impl TreeNode {
  9. #[inline]
  10. pub fn new(val: i32) -> Self {
  11. TreeNode {
  12. val,
  13. left: None,
  14. right: None
  15. }
  16. }
  17. }
  18. use std::rc::Rc;
  19. use std::cell::RefCell;
  20. pub fn merge_trees(t1: Option<Rc<RefCell<TreeNode>>>, t2: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
  21. if let None = t1 {
  22. return t2;
  23. }
  24. if let None = t2 {
  25. return t1;
  26. }
  27. let t11 = t1.unwrap();
  28. let t22 = t2.unwrap();
  29. let t1_val = t11.borrow().val;
  30. let t2_val = t22.borrow().val;
  31. let mut t1_left = None;
  32. let mut t1_right = None;
  33. let mut t2_left = None;
  34. let mut t2_right = None;
  35. if let &Some(ref t) = &t11.borrow().left {
  36. t1_left = Some(Rc::clone(t));
  37. }
  38. if let &Some(ref t) = &t11.borrow().right {
  39. t1_right = Some(Rc::clone(t));
  40. }
  41. if let &Some(ref t) = &t22.borrow().left {
  42. t2_left = Some(Rc::clone(t));
  43. }
  44. if let &Some(ref t) = &t22.borrow().right {
  45. t2_right = Some(Rc::clone(t));
  46. }
  47.  
  48. let left = merge_trees(t1_left, t2_left);
  49. let right = merge_trees(t1_right, t2_right);
  50.  
  51. Some(Rc::new(RefCell::new(TreeNode {
  52. val: t1_val + t2_val,
  53. left: left,
  54. right: right,
  55. })))
  56. }
  57.  
  58. fn main() {
  59. let t1 = Rc::new(RefCell::new(TreeNode::new(0)));
  60. t1.borrow_mut().left = Some(Rc::new(RefCell::new(TreeNode::new(1))));
  61. t1.borrow_mut().right = Some(Rc::new(RefCell::new(TreeNode::new(2))));
  62. let t2 = Rc::new(RefCell::new(TreeNode::new(3)));
  63. println!("merge_tree:{:?}", merge_trees(Some(t1), Some(t2)));
  64. }
Add Comment
Please, Sign In to add comment