From d4b3bb172afda39fc4d8cea9d4f7c65083f22262 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Thu, 7 Mar 2019 10:25:59 -0500 Subject: [PATCH] Add binary_tee example --- bin_tree/Cargo.toml | 7 +++++++ bin_tree/src/main.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 bin_tree/Cargo.toml create mode 100644 bin_tree/src/main.rs 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); +}