#[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); }