trait BinaryTree<K,V> {
fn pre_order(&self);
fn in_order(&self);
fn pos_order(&self);
}
trait BinarySearchTree<K:PartialOrd,V>:BinaryTree<K,V> {
fn insert(&mut self, key:K,value: V);
}
impl<K,V:std::fmt::Display> Node<K,V> {
fn new(key: K,value: V) -> Self {
Node{
left: None,
right: None,
value: value,
key: key,
}
}
}
impl<K:PartialOrd,V:std::fmt::Display> BinarySearchTree<K,V> for Node<K,V>{
fn insert(&mut self, key:K,value:V) {
if self.key < key {
if let Some(ref mut right) = self.right {
right.insert(key,value);
} else {
self.right = Some(Box::new(Node::new(key,value)));
}
} else {
if let Some(ref mut left) = self.left {
left.insert(key,value);
} else {
self.left = Some(Box::new(Node::new(key,value)));
}
}
}
}