Έτσι, όταν μπορώ να διαγράψω το δυαδικό δένδρο αναζήτησης, χρειάζεται να έχουμε σαν 7 διαφορετικές περιπτώσεις, δηλαδή
- Αριστερό Φύλλο?
- Δικαίωμα Leaf?
- Αριστερά παιδί μόνο με αφήσει το παιδί. // δηλαδή ο κόμβος που πρόκειται να διαγραφούν είναι το αριστερό παιδί της είναι η μητρική και έχει αφήσει μόνο παιδί.
- Αριστερά παιδί με μόνο το δικαίωμα του παιδιού.
- Δικαίωμα του παιδιού με άφησε μόνο παιδί.
- Δικαίωμα του παιδιού με μόνο το δικαίωμα του παιδιού.
- Κόμβος για να διαγραφούν έχει τόσο τα παιδιά, δηλαδή δεξιά και αριστερά.
Τώρα, όταν αυτός ο κώδικας χρησιμοποιεί if-elseπαίρνει πολύ άσχημη .. είναι οποιοδήποτε άλλο τρόπο για να γίνει αυτό υπάρχει.
Εδώ είναι το απόσπασμα κώδικα μου
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;
}













