From 4ee5b8d6a9ebf49ce30ff7d93ef7401039ffecc6 Mon Sep 17 00:00:00 2001 From: nodist Date: Thu, 8 Oct 2026 10:51:06 -0400 Subject: impl kpl tree test with c strings --- source/tree.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'source') diff --git a/source/tree.c b/source/tree.c index 964899f..1fbd980 100644 --- a/source/tree.c +++ b/source/tree.c @@ -4,12 +4,17 @@ extern inline void kpl_tree_init(kpl_tree *tree, kpl_tree_node_compare_fn node_compare_fn, kpl_tree_node_free_fn node_free_fn); -static void kpl_tree_free_helper(kpl_tree_node *node, kpl_tree_node_free_fn node_free_fn) { - if (node->tree_left) - kpl_tree_free_helper(node->tree_left, node_free_fn); - if (node->tree_right) - kpl_tree_free_helper(node->tree_right, node_free_fn); - node_free_fn(node); +static void kpl_tree_free_helper(kpl_tree_node *root_node, kpl_tree_node_free_fn node_free_fn) { + if (!root_node) + return; + while (root_node->tree_duplicates) { + kpl_tree_node *tmp_node = root_node->tree_duplicates; + root_node->tree_duplicates = root_node->tree_duplicates->tree_duplicates; + node_free_fn(tmp_node); + } + kpl_tree_free_helper(root_node->tree_left, node_free_fn); + kpl_tree_free_helper(root_node->tree_right, node_free_fn); + node_free_fn(root_node); } void kpl_tree_free(kpl_tree *tree) { @@ -93,5 +98,8 @@ static kpl_tree_node *kpl_tree_insert_helper(kpl_tree_node *restrict root_node, } void kpl_tree_insert(kpl_tree *tree, void *insert_node) { + kpl_tree_node *node = insert_node; + node->tree_left = node->tree_right = node->tree_duplicates = NULL; + node->tree_height = KPL_TREE_TREE_HEIGHT_INIT; tree->root_node = kpl_tree_insert_helper(tree->root_node, insert_node, tree->node_compare_fn); } -- cgit v1.2.3