struct t_node *node_search(struct t_node *root, void *key, comp eq) { if(!root || root->data == key) { return root; } else if(eq(root->data, key) < 0) { return node_search(root->right, key, eq); } else { return node_search(root->left, key, eq); } }
END_TEST START_TEST(test_node_delete) { node *root = node_new("d", "definition"); node *l = node_new("b", "b"); node *ll = node_new("a", "a"); node *lr = node_new("c", "c"); node_insert(root, l); node_insert(root, ll); node_insert(root, lr); // ensure correct insertions ck_assert_ptr_eq(l, root->left); ck_assert_ptr_eq(ll, root->left->left); ck_assert_ptr_eq(lr, root->left->right); ck_assert_int_eq(4, node_size(root)); ck_assert_ptr_eq(l, node_delete(root, "b")); // ensure correct reinsertion ck_assert_ptr_eq(ll, root->left); ck_assert_ptr_eq(NULL, root->right); ck_assert_ptr_eq(NULL, root->left->left); ck_assert_ptr_eq(lr, root->left->right); // node is not found in the tree anymore ck_assert_ptr_eq(NULL, node_search(root, "b")); ck_assert_int_eq(3, node_size(root)); node_free(root); }
END_TEST START_TEST(test_node_search) { node *root = node_new("term", "definition"); node *l = node_new("a", ""); node *r = node_new("c", ""); node_insert(root, l); node_insert(root, r); node *s = node_search(root, "a"); ck_assert_ptr_eq(l, s); node_free(root); }
struct t_node *tree_search(struct bs_tree *tree, void *key, comp eq) { return node_search(tree->root, key, eq); }