binary_search_tree_visualizer/visualizer/
ascii.rs

1use crate::tree::{BinarySearchTree, Node};
2use crate::Result;
3use crate::visualizer::TreeVisualizer;
4
5/// ASCII art visualizer for binary search trees
6pub 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}