kiedy więc usunę w binarne drzewo poszukiwań, muszę mieć jak 7 różnych przypadków, tj
- Lewy liści;
- Prawo liści;
- Lewa dziecku tylko lewy dziecka. // czyli węzeł zostać usunięte jest lewa dzieckiem swojego rodzica i pozostawił tylko dziecko.
- Dziecko z lewej tylko prawe dziecka.
- Prawo dziecka tylko z lewej dziecka.
- Prawo dziecka tylko z prawej dziecka.
- Węzeł zostać usunięte zostały zarówno dzieci, czyli na prawo i lewo.
Teraz, gdy ten kod jest przy użyciu if-elserobi się dość nieprzyjemny .. Czy jest jakiś inny sposób to zrobić.
Tu jest mój urywek kodu
if(current->left==NULL && current->right==NULL && current->key<prev->key) //left leaf
prev->left=NULL;
else if(current->left==NULL && current->right==NULL && current->key>prev->key) // right leaf
prev->right=NULL;
else if(current->left!=NULL && current->right==NULL && current->key<prev->key) // left child with one child
prev->left=current->left;
else if(current->left==NULL && current->right!=NULL && current->key<prev->key)
prev->left=current->right;
else if(current->left!=NULL && current->right==NULL && current->key>prev->key)
prev->right=current->left;
else if(current->left==NULL && current->right!=NULL && current->key>prev->key)
prev->right=current->left;
else if(current->left!=NULL && current->right!=NULL)
{
check=current->right;
check1=check;
while(check->left!=NULL)
{
check1=check;
check=check->left;
}
*current=*check;
check1->left=NULL;
}













