Guest User

Untitled

a guest
Dec 13th, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.77 KB | None | 0 0
  1. use std::cmp::Ordering::*;
  2.  
  3. type Link<T> = Option<Box<Node<T>>>;
  4.  
  5. #[derive(Debug)]
  6. struct Node<T: Ord> {
  7.     value: T,
  8.     right: Link<T>,
  9.     left: Link<T>,
  10. }
  11.  
  12. impl<T: Ord> Node<T> {
  13.     fn new(value: T) -> Self {
  14.         Node {
  15.             value: value,
  16.             right: None,
  17.             left: None
  18.         }
  19.     }
  20.     fn add(&mut self, value: T) {
  21.         let next = match self.value.cmp(&value) {
  22.             Less => {
  23.                 &mut self.left
  24.             },
  25.             Greater => {
  26.                 &mut self.right
  27.             },
  28.             Equal => {panic!()},
  29.         };
  30.         if let &mut Some(ref mut n) = next {
  31.             n.add(value);
  32.         } else {
  33.             *next = Some(Box::new(Node::new(value)));
  34.         }
  35.        
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment