Eliminarea (în general) nu este comutativ. Aici este un contraexemplu:
4
/ \
3 7
/
6
Ce dacă ștergem 4 și apoi 3?
Când ștergem 4, obținem 6 ca noua rădăcină:
6
/ \
3 7
Ștergerea 3 nu se schimba copacul, dar ne dă acest lucru:
6
\
7
Ce dacă ștergem 3 și apoi 4?
Când ștergem 3 copac nu se schimbă:
4
\
7
/
6
Cu toate acestea, atunci când vom șterge acum 4, noua rădăcină devine 7:
7
/
6
Cei doi pomi care rezultă nu sunt identice, prin urmare, ștergerea nu este comutativ.
ACTUALIZAȚI
Nu am citit restricția că acest lucru este atunci când ștergeți întotdeauna un nod cu 2 copii. Soluția mea este pentru cazul general. Voi actualiza dacă / atunci când pot găsi un contra-exemplu.
UN ALT UPDATE
Nu am dovezi concrete, dar am de gând să ghicesc:
În cazul general, se ocupe de ștergeri diferit, în funcție de faptul dacă aveți doi copii, un copil sau fără copii. În contra-exemplu am furnizat, pot șterge mai întâi un nod cu doi copii și apoi un nod cu un singur copil. După aceea, am șterge un nod fără copii și apoi un alt nod cu un singur copil.
În cazul special de numai ștergerea nodurilor cu doi copii, pe care doriți să ia în considerare cazul în care ambele sunt noduri în același sub-copac (din moment ce nu ar conta dacă acestea sunt în diferite sub-copaci, puteți fi siguri că structura generală nu se va schimba în funcție de ordinea de ștergere). Ceea ce într-adevăr nevoie pentru a dovedi este dacă ordinea de ștergere a nodurilor în același sub-copac, în cazul în care fiecare nod are doi copii, probleme.
Luați în considerare două noduri A și B, în cazul în care A este un strămoș al lui B. Apoi, puteți rafina în continuare întrebarea să fie:
Este ștergerea comutativ atunci când au în vedere eliminarea a două noduri dintr-un binar de căutare copac, care au o relație de-strămoș descendent unul de altul (acest lucru ar însemna că acestea sunt în același sub-copac)?
Când ștergeți un nod (să zicem A), ai traversa sub-arborele din dreapta pentru a găsi elementul minim. Acest nod va fi un nod frunză și niciodată nu poate fi egal cu B (deoarece B are doi copii și nu poate fi un nod frunză). Tu ar înlocui atunci valoarea lui A cu valoarea acestei frunze-nod. Aceasta înseamnă că singura modificare structurală a arborelui este înlocuirea valorii lui A cu valoarea frunzei-nod, și pierderea de frunze-nod.
Același proces este implicat pentru B. Aceasta este, înlocuiți valoarea nodului și înlocuiți-o frunză nod. Deci , în general, atunci când ștergeți un nod cu doi copii, singura modificare structurală este modificarea valorii nodului pe care o ștergeți, iar ștergerea nodului de frunze , care este valoarea pe care îl utilizați ca înlocuitor .
Deci, întrebarea este în continuare rafinat:
Puteți garanta că veți obține întotdeauna același nod de înlocuire, indiferent de ordinea de ștergere (atunci când sunt întotdeauna ștergerea unui nod cu doi copii)?
Răspunsul (cred) este da. De ce? Iată câteva observații:
- Să presupunem că ștergeți nodul descendent primul și al doilea nod strămoș. Sub-copac , care a fost modificat atunci când ați șters nodul descendent este nu în sub-arborele din stânga al copilului dreapta nodului strămoșul lui. Acest lucru înseamnă că această sub-copac rămâne neafectată. Acest lucru înseamnă , de asemenea , este indiferent de ordinea de ștergere, două diferite sub-arbori sunt modificate și , prin urmare , operațiunea este comutativă.
- Din nou, să presupunem că ștergeți nodul descendent primul și al doilea nod strămoș. Sub-copac , care a fost modificat atunci când ați șters nodul descendent este în sub-arborele stânga al copilului dreapta nodului strămoșul lui. Dar chiar și aici, nu există nici o suprapunere. Motivul este atunci când ștergeți nodul descendent în primul rând, te uiți la sub-arborele din stânga al nodului descendent lui dreapta copilului. Când apoi ștergeți nodul strămoș, vei nu merge în jos , care sub-copac deoarece veți întotdeauna merge spre stânga , după ce introduceți sub-tree stânga-dreapta copil nodul strămoșul lui lui. Deci , din nou, indiferent de ceea ce ștergeți mai întâi pe care o modificați diferite sub-arbori și astfel încât să apară ordinea nu contează.
- Un alt caz este dacă ștergeți nodul strămoș primul și veți găsi că nodul minim este un copil al nodului descendent. Aceasta înseamnă că nodul descendent se va termina cu un singur copil, și ștergerea un copil este banală. Acum , ia în considerare cazul în care , în acest scenariu, ați șters nodul descendent primul. Apoi , v - ar înlocui valoarea nodului descendent cu copilul său drept și apoi ștergeți copilul din dreapta. Atunci când ștergeți nodul strămoș, va ajunge găsi același nod minim (copilul stânga vechi nod șters, care este , de asemenea , copilul stânga nodului înlocuit lui). Oricum, va termina cu aceeași structură.
Aceasta nu este o dovadă riguroasă; acestea sunt doar câteva observații am făcut. Prin toate mijloacele, nu ezitați să faceți găuri!