/* * Function: void destroy_root( Bt_Entry* root, destroy_item del_item ) * Description: destroy binary tree * Input: root: binary tree root entry * del_item: item deleting function * Output: none * Return: void * Others: none */ void destroy_root( Bt_Entry* root, destroy_item del_item ) { if( !root ) { return; } if( root->right ) { destroy_root( root->right, del_item ); } if( root->left ) { destroy_root( root->left, del_item ); } if( root ) { if( del_item ) { ( *del_item )( root->item ); } _( printf( "destroy entry with item[%s]\n", ( char * )root->item ) ); destroy_entry( root ); } }
void ValuePointer::Set (value handle) { if (cffiValue) { *cffiValue = handle; } else { if (cffiRoot) destroy_root (cffiRoot); cffiRoot = create_root (handle); } }
ValuePointer::~ValuePointer () { if (cffiValue) { free_root (cffiValue); } else if (cffiRoot) { destroy_root (cffiRoot); } else if (hlValue) { hl_remove_root (&hlValue); } }
/* * Function: void* destroy_bt( Bt * bt, destroy_item del_item ) * Description: bt deleting function * Input: bt: the bt to be deleted * del_item: item deleting function * Output: none * Return: void * Others: none */ void* destroy_bt( Bt * bt, destroy_item del_item ) { destroy_root( bt->root, del_item ); free( bt ); }
int main(int argc,char *argv[]) { int i; struct btree_root *bt; struct btree_node *bn; ptr_t key[] = { 1,2,3,4,30,20,10,30,24,20,3,4,39 }; if(!(bt = init_root(compare,2))) return -1; printf("key len:%d\n",LEN(key)); for(i=0;i<LEN(key);i++) { printf("-------begin(insert:%d)---------\n",key[i]); if(btree_insert(bt,key[i])<0) { fprintf(stderr,"insert into btree error!\n"); goto _destroy; } // btree_travel(bt); printf("--------end(insert:%d)------\n",key[i]); } btree_travel(bt); /* if(btree_delete(bt,100)<0) { fprintf(stderr,"delete node key:%lu error\n",100UL); goto _destroy; } else fprintf(stderr,"delete node key:%lu successful\n",100UL); */ for(i=0;i<LEN(key);i++) { printf("-----------begin(delete:%d,i:%d)----------\n",key[i],i); //if(btree_full_delete(bt,NULL,key[i])<0) btree_delete(bt,NULL,key[i]); /* { fprintf(stderr,"delete node key:%u error\n",key[i]); //goto _destroy; } else { fprintf(stderr,"delete node key:%u succesful\n",key[i]); } */ printf("--------travel------\n"); btree_travel(bt); printf("-----------end(delete:%d)------------\n",key[i]); } /* if(btree_search(bt,100,&bn)<0) { fprintf(stderr,"cann't search the key:%ld\n",100L); goto _destroy; } else fprintf(stderr,"node length:%d,key:%lu\n",bn->n,bn->key[0]); */ btree_travel(bt); _destroy: destroy_root(bt); return 0; }