#include "tree.h" uint8_t tree_exists(tree_t* tree, tree_node_val_t value) { if(tree->root == NULL) return 0; if(!tree->cmp(tree, tree->root->data, value)) return 1; int result; tree_node_t** temp = &tree->root; while((*temp) != NULL) { if(!(result = tree->cmp(tree, (*temp)->data, value))) return 1; temp = (result <= 0 ? &((*temp)->left) : &((*temp)->right) ); } return 0; } int8_t tree_cmp(tree_t* tree, tree_node_val_t value1, tree_node_val_t value2) { return (int8_t)strcmp(value1, value2); } void tree_insert(tree_t* tree, tree_node_val_t value) { tree_node_t* node = (tree_node_t*)calloc(1, sizeof(tree_node_t)); node->data = value; if(tree->root == NULL) { tree->root = node; } else { tree_node_t** temp = &(tree->root); while((*temp) != NULL) { temp = (tree->cmp(tree, (*temp)->data, node->data) <= 0 ? &((*temp)->left) : &((*temp)->right) ); } (*temp) = node; } } tree_t* tree_create() { tree_t* tree = (tree_t*)calloc(1, sizeof(tree_t)); tree->insert = tree_insert; tree->exists = tree_exists; tree->cmp = tree_cmp; return tree; }