programming-rust-book/bin_tree/src/main.rs

47 lines
1.0 KiB
Rust

#[derive(Debug)]
enum BinaryTree<T> {
Empty,
NonEmpty(Box<TreeNode<T>>)
}
#[derive(Debug)]
struct TreeNode<T> {
element: T,
left: BinaryTree<T>,
right: BinaryTree<T>
}
impl<T: Ord> BinaryTree<T> {
fn add(&mut self, value: T) {
match *self {
BinaryTree::Empty => *self = BinaryTree::NonEmpty(Box::new(TreeNode {
element: value,
left: BinaryTree::Empty,
right: BinaryTree::Empty,
})),
BinaryTree::NonEmpty(ref mut node) => {
if value <= node.element {
node.left.add(value);
} else {
node.right.add(value);
}
}
}
}
}
fn main() {
let mut tree = BinaryTree::Empty;
tree.add("Mercury");
tree.add("Venus");
tree.add("Earth");
tree.add("Mars");
tree.add("Jupiter");
tree.add("Saturn");
tree.add("Uranus");
tree.add("Neptune");
tree.add("Pluto");
println!("Tree: {:?}", tree);
}