diff --git a/gemla/src/main.rs b/gemla/src/main.rs index e7a11a9..e0ee01f 100644 --- a/gemla/src/main.rs +++ b/gemla/src/main.rs @@ -1,3 +1,18 @@ -fn main() { - println!("Hello, world!"); +mod tree; + +fn build_tree(h: u32) -> Option> { + let mut result: Option> = None; + + if h != 0 { + result = Some(tree::concat_trees(h, build_tree(h - 1), build_tree(h - 1))); + } + + result } + +fn main() { + let tree: tree::Tree = *build_tree(25).expect("Error getting result from build tree."); + + println!("Resulting tree from build_tree."); + println!("{}", tree); +} \ No newline at end of file diff --git a/gemla/src/tree/mod.rs b/gemla/src/tree/mod.rs new file mode 100644 index 0000000..6fceae8 --- /dev/null +++ b/gemla/src/tree/mod.rs @@ -0,0 +1,28 @@ +use std::fmt; + +pub struct Tree { + val: u32, + left: Option>, + right: Option> +} + +pub fn concat_trees(v: u32, l: Option>, r: Option>) -> Box { + Box::new(Tree { + val: v, + left: l, + right: r + }) +} + +impl fmt::Display for Tree { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let node_str = |t: &Option>| -> String { + match t { + Some(n) => format!("{}", *n), + _ => String::from("_") + } + }; + + write!(f, "({} :{}|{})", self.val, node_str(&self.left), node_str(&self.right)) + } +} \ No newline at end of file