47 lines
1.0 KiB
Rust
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);
|
|
}
|