diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-01-15 01:13:51 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-01-15 01:13:51 +0100 |
| commit | 3f79b7bd553a52fca7a098f5195b406ff9970491 (patch) | |
| tree | 99d0399141e7894219fe7a0deed1ccadb226b9c9 /lib/avl_tree/avl_tree.c | |
| parent | 919450dc7d965c4067287e1ece3ceafdde8ff5a9 (diff) | |
add list and static library builder
Diffstat (limited to 'lib/avl_tree/avl_tree.c')
| -rw-r--r-- | lib/avl_tree/avl_tree.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/lib/avl_tree/avl_tree.c b/lib/avl_tree/avl_tree.c index db3e44e..1e901d1 100644 --- a/lib/avl_tree/avl_tree.c +++ b/lib/avl_tree/avl_tree.c @@ -63,22 +63,18 @@ void *avl_tree_search(avl_tree_t *tree, void *value) return 0; avl_tree_node_t *current = tree->root; - u8 factor = tree->compare(current->value, value); + i8 factor = 0; - while (current->left || current->right) { + while (current) { factor = tree->compare(current->value, value); switch (factor) { - case (u8)1: current = current->right; break; - case (u8)0: return current->value; break; - case (u8)-1: current = current->left; break; + case 1: current = current->right; break; + case 0: return current->value; break; + case -1: current = current->left; break; } } - factor = tree->compare(current->value, value); - if (!factor) - return current->value; - return 0; } @@ -99,7 +95,7 @@ void avl_tree_insert(avl_tree_t *tree, void *value) { avl_tree_node_t *current = tree->root; avl_tree_node_t *last = current; - u8 factor = 0; + i8 factor = 0; if (current) factor = tree->compare(current->value, value); @@ -110,13 +106,13 @@ void avl_tree_insert(avl_tree_t *tree, void *value) last = current; switch (factor) { - case (u8)1: current = current->right; break; - case (u8)0: + case 1: current = current->right; break; + case 0: free(current->value); current->value = value; current = 0; break; - case (u8)-1: current = current->left; break; + case -1: current = current->left; break; } } @@ -125,8 +121,8 @@ void avl_tree_insert(avl_tree_t *tree, void *value) current = __new_avl_tree_node(last, value); switch (factor) { - case (u8)1: last->right = current; break; - case (u8)-1: last->left = current; break; + case 1: last->right = current; break; + case -1: last->left = current; break; } } else if (!last) { ++tree->size; @@ -159,7 +155,7 @@ void avl_tree_remove(avl_tree_t *tree, void *value) { avl_tree_node_t *current = tree->root; avl_tree_node_t *last = current; - u8 factor = 0; + i8 factor = 0; if (current) factor = tree->compare(current->value, value); @@ -170,9 +166,9 @@ void avl_tree_remove(avl_tree_t *tree, void *value) last = current; switch (factor) { - case (u8)1: current = current->right; break; - case (u8)0: current = 0; break; - case (u8)-1: current = current->left; break; + case 1: current = current->right; break; + case 0: current = 0; break; + case -1: current = current->left; break; } } |