Fix major bugs in t_rb_tree
authorLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Fri, 1 Aug 2025 11:56:07 +0000 (13:56 +0200)
committerLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Fri, 1 Aug 2025 11:56:07 +0000 (13:56 +0200)
ft_struct/ft_rbtree_free.c
ft_struct/ft_rbtree_helpers.c
ft_struct/ft_rbtree_insert.c

index 7f436f6bf39c2ac9f25b1ed99dd1480710e00113..f23efcb094bf094cb1689d4e99ebfaaa3fa0e464 100644 (file)
@@ -3,7 +3,10 @@
 
 static void    free_node(t_rbtree_node *node, void (*free_el)(void *))
 {
-       free_el(&node->data);
+       if (!node)
+               return ;
+       if (free_el)
+               free_el(&node->data);
        free_node(node->left, free_el);
        free_node(node->right, free_el);
        free(node->left);
index cb95238eff32ba89933db6dacf92d35800307118..82147c58c3e6ce805e53e79a130ce5e25c120ede 100644 (file)
@@ -25,5 +25,7 @@ void  ft_rbtree_rotate(t_rbtree_node *node)
        }
        node->parent = parent->parent;
        parent->parent = node;
+       if (!node->parent)
+               node->tree->root = node;
        return ;
 }
index e8a56a572e677d3e218bccb52690712cf8384e81..ea979370a1eb2262a7cc8d0cd11a6881397310a5 100644 (file)
@@ -86,6 +86,7 @@ t_ft_stat     insert_root(t_rbtree *tree, void *element)
        new_node->left = NULL;
        new_node->right = NULL;
        ft_memcpy(&new_node->data, element, tree->el_size);
+       tree->root = new_node;
        return (success);
 }