Eltávolítása egy bináris keresési fa
Ha a törlés szükséges vizsgálni a három esetben [3]:
1. Ha az eltávolított csomópontnak nincs fiai, eltávolítjuk azt, további beállítás nélkül a fa (ábra. 4.6 (a)).
2. Ha az eltávolított csomópont csak egy részfa, az egyetlen gyermeke lehet helyezni akár, hogy elfoglalja helyét (ábra. 7.6 (b) pont).
3. Ha az eltávolított csomópont p két részfák, s ez vevő szimmetrikus módon (vagy annak prekurzorát egy szimmetrikus módon) van, hogy elfoglalja helyét. A leszármazott szimmetrikus módon nem hagyható részfa (mintha ő balján gyermeke lenne p vevő szimmetrikus módon). Így a jobb fia elem s lehet felfelé mozdul, hogy az a hely, s (ábra. 4.6 (a) pont).
Ábra. 4.6. Eltávolítása csomópontok egy bináris keresési fa
valamint - eltávolítjuk a kulcsszerepet szerelvény 15;
b - eltávolítjuk egység 5 kulccsal;
in - eltávolító szerelvény kulccsal 11
Az alábbi algoritmus, a fa ugyanaz marad, ha nem létezik a csomópont kulcsot.
// helyszínen keresés gombot. Állítsa p úgy, hogy rámutat
// ezen az oldalon, és q - apja, ha létezik
while ((p! = NULL) (P-> k! = Key))
if (kulcs
cout<<”такого ключа нет в дереве. Дерево остается не измененным \n”;
// Állítsa be a változó csomópont v, amely felváltja o.
// törli a csomópont legfeljebb egy fiú
ha (p-> maradt == NULL) v = p-> jobbra;
mást (ha p-> jobb == NULL) v = p-> maradt;
mást // p csomópont két fia
// Állítsa be az utódja v p szimmetrikus módon,
// a változó t - az apa v
s = V-> maradt; // s - bal fia v
// Ezen a ponton, v az utódja a csomópont p
// egy szimmetrikus módon
// p az apa a változó v, u v = t-> maradt.
// törlése v csomópontot a jelenlegi helyzetben, és cserélje ki a jobb gyermek csomópont v
// létre fiai v úgy, hogy ők voltak fiai p
// betét v csomópont a pozícióban, amelyet előzetesen birtokában csomópont p
ha (q == NULL) // p csomópont volt a gyökér a fa