diff --git a/bin_tree/Cargo.toml b/bin_tree/Cargo.toml new file mode 100644 index 0000000..09af6e0 --- /dev/null +++ b/bin_tree/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "bin_tree" +version = "0.1.0" +authors = ["Timothy Warren "] +edition = "2018" + +[dependencies] diff --git a/bin_tree/src/main.rs b/bin_tree/src/main.rs new file mode 100644 index 0000000..3e239c6 --- /dev/null +++ b/bin_tree/src/main.rs @@ -0,0 +1,46 @@ +#[derive(Debug)] +enum BinaryTree { + Empty, + NonEmpty(Box>) +} + +#[derive(Debug)] +struct TreeNode { + element: T, + left: BinaryTree, + right: BinaryTree +} + +impl BinaryTree { + 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); +}