Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. use std::mem;
  2.  
  3. use std::cell::RefCell;
  4. use std::rc::Rc;
  5.  
  6. type BareTree<T> = Rc<RefCell<Node<T>>>;
  7. pub type Tree<T> = Option<BareTree<T>>;
  8.  
  9. #[derive(Debug, Clone)]
  10. pub struct Node<T> {
  11. pub data: T,
  12. pub left: Tree<T>,
  13. pub right: Tree<T>,
  14. pub parent: Tree<T>,
  15. }
  16.  
  17. impl<T> Node<T> {
  18. pub fn new(data: T) -> Tree<T> {
  19. Some(Rc::new(RefCell::new(Node {
  20. data,
  21. left: None,
  22. right: None,
  23. parent: None,
  24. })))
  25. }
  26. }
  27.  
  28. pub struct BinarySearchTree<T> {
  29. pub root: Tree<T>,
  30. pub length: u64,
  31. }
  32.  
  33. impl<T> BinarySearchTree<T>
  34. where
  35. T: std::cmp::PartialOrd + std::clone::Clone + std::fmt::Debug,
  36. {
  37. pub fn new() -> Self {
  38. BinarySearchTree {
  39. root: None,
  40. length: 0,
  41. }
  42. }
  43.  
  44. pub fn add(&mut self, data: T) {
  45. self.length += 1;
  46. let root = mem::replace(&mut self.root, None);
  47. self.root = self.add_rec(root, data);
  48. }
  49.  
  50. fn add_rec(&mut self, node: Tree<T>, data: T) -> Tree<T> {
  51. println!("visiting node: {:?}, with data: {:?}", node, data);
  52. match node {
  53. Some(n) => {
  54. if data <= n.clone().borrow().data {
  55. n.borrow_mut().left = self.add_rec(n.borrow_mut().left.clone(), data);
  56. } else {
  57. n.borrow_mut().right = self.add_rec(n.borrow_mut().right.clone(), data);
  58. }
  59. Some(n)
  60. }
  61. _ => Node::new(data),
  62. }
  63. }
  64.  
  65. }
  66.  
  67. mod tests {
  68. use super::*;
  69.  
  70. #[test]
  71. fn create_bst() {
  72. let _ = BinarySearchTree::<u32>::new();
  73. assert!(true);
  74. }
  75.  
  76. #[test]
  77. fn add_to_bst() {
  78. let mut bst = BinarySearchTree::<u32>::new();
  79. bst.add(1);
  80. bst.add(2);
  81. bst.add(3);
  82. bst.add(4);
  83. bst.add(5);
  84. bst.add(6);
  85. bst.add(7);
  86. assert!(true);
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement