Guest User

Untitled

a guest
May 20th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. #![feature(nll)]
  2.  
  3. // A simple binary tree built with structs
  4. #[derive(Clone)]
  5. pub struct Tree<'a, T: PartialOrd + Clone> {
  6. left: Option<Box<Tree<'a, T>>>,
  7. right: Option<Box<Tree<'a, T>>>,
  8. pub value: T,
  9. id: &'a u32,
  10. }
  11.  
  12. impl<'a, T: PartialOrd + Clone> Tree<'a, T> {
  13. pub fn new(value: T) -> Tree<'a, T> {
  14. let tree = Tree {
  15. left: None,
  16. right: None,
  17. value: value,
  18. id: &15,
  19. };
  20. return tree;
  21. }
  22.  
  23. // Finds closeset node to the value
  24. fn find_closest_mut(&mut self, value: T) -> &mut Tree<'a, T> {
  25. if value == self.value {
  26. return self;
  27. }
  28.  
  29. if value < self.value {
  30. if self.left.is_none() {
  31. return self
  32. }
  33. } else {
  34. if self.right.is_none() {
  35. return self
  36. }
  37. }
  38.  
  39. let sub_tree = if value < self.value {
  40. &mut self.left
  41. } else {
  42. &mut self.right
  43. };
  44.  
  45. sub_tree.as_mut().unwrap().find_closest_mut(value)
  46. }
  47.  
  48. pub fn insert(&mut self, value: T) -> &mut Tree<'a, T> {
  49. let node = self.find_closest_mut(value.clone());
  50. if value == node.value {
  51. return self;
  52. } else if value < node.value {
  53. node.left = None
  54. }
  55. return self;
  56. }
  57. }
  58.  
  59. fn main () {
  60.  
  61. }
Add Comment
Please, Sign In to add comment