Wenn ich also in binärer Suchbaum löschen, muss ich wie 7 verschiedene Fälle haben müssen, dh
- Links Blatt;
- Rechts Blatt;
- Linkes Kind mit nur links Kind. // dh der Knoten gelöscht werden, ist das linke Kind es ist Eltern und es hat nur Kind verlassen.
- Kind mit nur rechts Kind verlassen.
- Rechts Kind mit nur links Kind.
- Rechts Kind mit nur rechtem Kind.
- Knoten werden gelöscht hat sowohl die Kinder, also rechts und links.
Nun , wenn dieser Code verwendet if-elsees ziemlich böse bekommt .. gibt es eine andere Art und Weise , dies zu tun.
Hier ist mein Code-Schnipsel
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;
}













