binary_search_tree_visualizer/visualizer/
ascii.rs1use crate::tree::{BinarySearchTree, Node};
2use crate::Result;
3use crate::visualizer::TreeVisualizer;
4
5pub struct AsciiVisualizer;
7
8impl<T: std::fmt::Display> TreeVisualizer<T> for AsciiVisualizer {
9 fn visualize(&self, tree: &BinarySearchTree<T>) -> Result<String> {
10 let mut result = String::new();
11 if let Some(root) = &tree.root {
12 self.visualize_node(root, "", true, &mut result);
13 }
14 Ok(result)
15 }
16}
17
18impl AsciiVisualizer {
19 fn visualize_node<T: std::fmt::Display>(
20 &self,
21 node: &Node<T>,
22 prefix: &str,
23 is_left: bool,
24 result: &mut String,
25 ) {
26 let connector = if is_left { "└── " } else { "┌── " };
27 result.push_str(&format!("{}{}{}\n", prefix, connector, node.value));
28
29 let new_prefix = format!("{}{}", prefix, if is_left { " " } else { "│ " });
30
31 if let Some(right) = &node.right {
32 self.visualize_node(right, &new_prefix, false, result);
33 }
34 if let Some(left) = &node.left {
35 self.visualize_node(left, &new_prefix, true, result);
36 }
37 }
38}