예제 #1
0
/*
 * (递归实现)查找"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);
}
예제 #2
0
/*
 * 删除结点(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;
}
예제 #3
0
파일: dict.c 프로젝트: lulujiang/segc
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;
}
예제 #4
0
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;
}