--- /dev/null
+#include "ft_struct.h"
+#include "libft.h"
+
+static size_t get_node_height(t_rbtree_node *node)
+{
+ if (!node)
+ return (0);
+ return (ft_maxs(get_node_height(node->left), get_node_height(node->right)) + 1);
+}
+
+static void print_nodes_at_depth(t_rbtree_node *node, size_t cur_height, size_t spaces)
+{
+ if (node && cur_height > 0)
+ {
+ spaces = (spaces - 1) / 2;
+ print_nodes_at_depth(node->left, cur_height - 1, spaces);
+ print_nodes_at_depth(node->right, cur_height - 1, spaces);
+ return ;
+ }
+ if (!node)
+ ft_printf(" ");
+ else if (node->is_black)
+ ft_printf("\033[37;40m%c\033[30;47m", 'b');
+ else
+ ft_printf("\033[37;41m%c\033[30;47m", 'r');
+ while (spaces > 0)
+ {
+ ft_printf(" ");
+ --spaces;
+ }
+ return ;
+}
+
+int ft_rbtree_draw(t_rbtree *tree, size_t min_height)
+{
+ size_t height;
+ size_t i;
+ size_t spaces;
+
+ if (!tree)
+ return (0);
+ height = get_node_height(tree->root);
+ spaces = 1;
+ i = 0;
+ while (i < height || i < min_height)
+ {
+ spaces = 2 * spaces + 1;
+ ++i;
+ }
+ i = 0;
+ ft_printf("\033[30;47m\n\n");
+ while (i < height)
+ {
+ print_nodes_at_depth(tree->root, i, spaces);
+ ft_printf("\n\n");
+ ++i;
+ }
+ while (i < min_height)
+ {
+ ft_printf("\n\n");
+ ++i;
+ ++height;
+ }
+ ft_printf("\033[0m\n");
+ return (2 + 2 * height + 1);
+}
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/20 16:59:43 by ljiriste #+# #+# */
-/* Updated: 2025/08/01 11:23:49 by ljiriste ### ########.fr */
+/* Updated: 2025/08/01 14:52:17 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
int ft_rbtree_is_black(t_rbtree_node *node);
void ft_rbtree_rotate(t_rbtree_node *node);
+int ft_rbtree_draw(t_rbtree *tree, size_t min_height);
+
# ifdef __cplusplus
}
# endif // __cplusplus