예제 #1
0
int avl_walker(avl *node, int (*callback)(void * /*entry*/, void * /*data*/), void *data) {
    int total = 0, ret = 0;

    if(node->avl_link[0]) {
        ret = avl_walker(node->avl_link[0], callback, data);
        if(ret < 0) return ret;
        total += ret;
    }

    ret = callback(node, data);
    if(ret < 0) return ret;
    total += ret;

    if(node->avl_link[1]) {
        ret = avl_walker(node->avl_link[1], callback, data);
        if (ret < 0) return ret;
        total += ret;
    }

    return total;
}
예제 #2
0
int avl_traverse(avl_tree *tree, int (*callback)(void * /*entry*/, void * /*data*/), void *data) {
    if(tree->root)
        return avl_walker(tree->root, callback, data);
    else
        return 0;
}
예제 #3
0
파일: avl.c 프로젝트: darrentangdt/netdata
int avl_traverse(avl_tree *t, int (*callback)(void *entry, void *data), void *data) {
    return avl_walker(t->root, callback, data);
}