int remove_item(Table table,Key key){ if(lookup_item(table,key) != NULL){ Node *p,*hoge,**q; p = *table; q = table; while(1){ if(p->item.key == key){ if(p->left==NULL && p->right==NULL){*q = NULL;} else if(p->left==NULL){*q = p->right;} else if(p->right==NULL){*q = p->left;} else{ hoge = p; q = &(p->left); p = p->left; while(p->right!=NULL){ q = &(p->right); p = p->right; } if(p->left!=NULL){*q = p->left;} else {*q = NULL;} hoge->item.key = p->item.key; } free(p); return 1; } if(p->item.key > key){ q = &(p->left); p = p->left; } else if(p->item.key < key){ q = &(p->right); p = p->right; } } } return 0; }