|
|
@@ -0,0 +1,46 @@
|
|
|
+// pub struct hufftree {
|
|
|
+// }
|
|
|
+
|
|
|
+struct Node {
|
|
|
+ left: Option<Box<Self>>,
|
|
|
+ right: Option<Box<Self>>,
|
|
|
+ character: Option<char>,
|
|
|
+}
|
|
|
+
|
|
|
+impl Node {
|
|
|
+ pub fn new() -> Node {
|
|
|
+ Self {
|
|
|
+ left: None,
|
|
|
+ right: None,
|
|
|
+ character: None,
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ pub fn new_with_character(character: char) -> Node {
|
|
|
+ Self {
|
|
|
+ character: Some(character),
|
|
|
+ left: None,
|
|
|
+ right: None,
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ pub fn join_left(self: &mut Node, left: Box<Node>) {
|
|
|
+ self.left = Some(left);
|
|
|
+ }
|
|
|
+
|
|
|
+ pub fn join_right(self: &mut Node, right: Box<Node>) {
|
|
|
+ self.right = Some(right);
|
|
|
+ }
|
|
|
+
|
|
|
+ pub fn is_leaf(self: &Node) -> bool {
|
|
|
+ self.left.is_none() & self.right.is_none()
|
|
|
+ }
|
|
|
+
|
|
|
+ pub fn get_character(self: &Node) -> Result<char, &str> {
|
|
|
+ if !self.is_leaf() {
|
|
|
+ return Err("This node is not a leaf node.");
|
|
|
+ }
|
|
|
+
|
|
|
+ Ok(self.character.unwrap())
|
|
|
+ }
|
|
|
+}
|