void rbt_inorder(rbt r, void f(char *s,colour_t c)) { if(r == NULL){ return; }else{ rbt_inorder(r->left,f); f(r->key,r->colour); rbt_inorder(r->right,f); } }
int main(){ Rbt_tree_link a = rbt_create(); Rbtlink it; srand(time(NULL)); puts("Inserting..."); for(i=0;i<N;i++) { num[i] = rand() % N; rbt_insert(a,num[i]); } printf("rbt_size: %d\n",rbt_size(a)); printf("min value:%d max value:%d\n",rbt_item(rbt_minimum(a)),rbt_item(rbt_maximum(a))); puts("Doing assert..."); rbt_assert(a); puts("Traversing (inorder)..."); rbt_inorder(a,func); for(i=0; i < N; i++) rbt_search(a, i); puts("Traversing (from max to min)..."); it = rbt_maximum(a); for(i = rbt_size(a)-1; i >= 0; i--) { assert(n[i] == rbt_item(it)); it = rbt_predecessor(it); } printf("rbt_size: %d\n",rbt_size(a)); puts("Deleting all values..."); int i = 0; for (i = 0; i < N; ++i) { printf("%d deleted\r", num[i]); rbt_delete(a, num[i]); } puts("\nDestroying rbt.."); rbt_destroy(a); puts("OK!"); return 0; }
void rbt_inorder(rbt r, void f(char *s)) { if (NULL == r) return; rbt_inorder(r->left, f); f(r->key); rbt_inorder(r->right, f); }