binary to tree

This commit is contained in:
2025-04-08 17:33:52 +02:00
parent 7f3a0b20d1
commit 4c00c14258
2 changed files with 32 additions and 8 deletions

View File

@@ -31,20 +31,18 @@ pub fn string_to_binary(bits: &str) -> Vec<u8> {
pub fn binary_to_string(bytes: Vec<u8>, len: u8) -> String {
let mut binary = String::new();
//bytes.reverse();
let mut word = Vec::new();
let mut word = String::new();
for b in &bytes {
let mut current = *b;
while current != 0b0000_0000 {
if current % 2 == 1 {
let current = *b;
for i in 0..8 {
if current >> (7 - i) & 1 == 1 {
word.push('1');
} else {
word.push('0');
}
current >>= 1;
}
word.reverse();
binary = binary + &word.iter().collect::<String>();
word = Vec::new();
binary = binary + &word;
word = String::new();
}
for _ in 0..8 - len {
binary.pop();

View File

@@ -41,3 +41,29 @@ pub fn create_tree(mut nodes: Vec<Node>) -> Node {
}
nodes.pop().unwrap()
}
pub fn read_tree(binary: &str) -> Node {
let mut stack = String::from(binary);
let mut to_do: Vec<&mut Box<Node>> = Vec::new();
let mut root = Box::new(Node::new());
if stack.remove(0) == '1' {
to_do.push(&mut root);
} else {
return *root;
}
while !to_do.is_empty() {
let mut int_root = to_do.remove(0);
let mut l = Box::new(Node::new());
let mut r = Box::new(Node::new());
if stack.remove(0) == '1' {
int_root.l = Some(l);
to_do.push(int_root.l.as_mut().unwrap());
}
if stack.remove(0) == '1' {
to_do.push(int_root.r.as_mut().unwrap());
}
}
*root
}