/* * (递归实现)查找"AVL树x"中键值为key的节点 */ Node* avltree_search(AVLTree x, Type key) { if (x==NULL || x->key==key) return x; if (key < x->key) return avltree_search(x->left, key); else return avltree_search(x->right, key); }
/* * 删除结点(key是节点值),返回根节点 * * 递归方法 * * 参数说明: * tree AVL树的根结点 * key 待删除的结点的键值 * 返回值: * 根节点 */ Node* avltree_delete(AVLTree tree, Type key) { Node *z; if ((z = avltree_search(tree, key)) != NULL) tree = delete_node(tree, z); return tree; }
word_info_t* dict_search_word_info(const char* text, size_t tsize) { #ifdef AVLTREE char* buf = (char*)text; char ch = buf[tsize]; buf[tsize] = 0; word_info_t* ret = (word_info_t*)avltree_search(root, text); buf[tsize] = ch; #else word_info_t* ret = (word_info_t*)hash_table_search(root, text, tsize); #endif return ret; }
int boztree_insert(boztree_t *t, boztree_id_t const *e) { unsigned int n=0; void *p; if(!t) return (errno=EFAULT, -1); if(!e) return (errno=EINVAL, -1); if(avltree_search(&t->a, &e->i, &n)) return (errno=EEXIST, -1); if(!gensetdyn_new(&t->s, &n)) return (errno=ENOMEM, -1); p = gensetdyn_p(&t->s, n); memcpy(p, e, t->s.esize); avltree_insert(&t->a, n); return 0; }