Delecja (w ogóle) nie jest przemienne. Oto kontrprzykład:
4
/ \
3 7
/
6
Co jeśli usuwamy 4, a następnie 3?
Gdy usuwamy 4, otrzymujemy 6 jako nowy root:
6
/ \
3 7
Usuwanie 3 nie zmienia drzewo, ale daje nam to:
6
\
7
Co jeśli usuwamy 3, a następnie 4?
Gdy usuwamy 3 drzewo nie zmienia:
4
\
7
/
6
Jednak, kiedy teraz usunąć 4, nowy korzeń staje 7:
7
/
6
Dwa uzyskane drzewa nie są takie same, a zatem delecja jest przemienne.
AKTUALIZACJA
Nie czytałem, że ograniczenie to jest, kiedy zawsze usunąć węzeł z 2 dzieci. Moje rozwiązanie jest dla przypadku ogólnego. Będę go zaktualizować, jeśli / kiedy mogę znaleźć kontrprzykład.
Kolejna aktualizacja
Nie mam konkretnych dowodów, ale ja zamierzam zgadywać:
W ogólnym przypadku można obsłużyć delecji różnie w zależności od tego, czy mają dwoje dzieci, jedno dziecko, czy ma dzieci. W przeciw-przykład ja przewidzianym, najpierw usunąć węzeł z dwójką dzieci, a potem do węzłów z jednym dzieckiem. Po tym, ja usunąć węzeł bez dzieci, a następnie innego węzła z jednym dzieckiem.
W szczególnym przypadku tylko usuwanie węzłów z dwójką dzieci, warto rozważyć przypadek, gdy oba węzły znajdują się w tym samym sub-tree (ponieważ nie ma znaczenia, czy są one w różnych sub-drzew, można mieć pewność, że ogólna struktura nie ulegnie zmianie w zależności od kolejności delecji). Co naprawdę trzeba udowodnić, czy kolejność usunięciem węzłów w tym samym sub-tree, gdzie każdy węzeł ma dwoje dzieci, sprawy.
Rozważmy dwa węzły A i B, gdzie A jest przodkiem B. Następnie można doprecyzować kwestię być:
Czy usunięcie przemienne gdy rozważa usunięcie dwoma węzłami od A binarne drzewo poszukiwań, które mają związek przodek-potomek siebie (oznaczałoby to, że oni są w tym samym sub-tree)?
Po usunięciu węzła (powiedzmy), to przechodzić odpowiedniego poddrzewa znaleźć najmniejszy element. Ten węzeł będzie węzłem liść i nigdy nie może być równy B (ponieważ B ma dwójkę dzieci i nie może być węzłem liść). Można by potem zastąpić wartość A z wartością tej liści węzła. Oznacza to, że tylko strukturalne zmiany w drzewie jest zastąpienie wartości A jest z wartości węzła liści, a utrata liści węzła.
Ten sam proces jest zaangażowany do B. Oznacza to, że zastąpienie wartości węzła i zastąpić liści węzła. Tak w ogóle, po usunięciu węzła z dwójką dzieci, jedyna zmiana strukturalna jest zmiana wartości węzła jesteś usuwanie i usunięcie węzła liści, kto jest wartość używasz jako zamiennik .
Więc pytanie jest następnie rafinowana:
Można zagwarantować, że będzie zawsze ten sam węzeł zastępczego, niezależnie od kolejności delecji (jeśli są zawsze Usuwanie węzła z dwojgiem dzieci)?
Odpowiedź (chyba) jest twierdząca. Czemu? Oto kilka uwag:
- Powiedzmy usunąć pierwszy potomek węzła i drugi węzeł przodek. Sub-tree, który został zmodyfikowany, gdy usunięty węzeł potomka jest nie w lewym sub-tree z prawej dzieckiem węzła przodka. Oznacza to, że sub-tree pozostaje nienaruszone. Oznacza to również, niezależnie od kolejności usunięcie, dwa różne sub-drzewa są modyfikowane, a zatem działanie jest przemienne.
- Ponownie, powiedzmy usunąć pierwszy potomek węzła i drugi węzeł przodek. Sub-tree, który został zmodyfikowany, gdy usunięty węzeł potomka jest w lewym sub-tree z prawej dzieckiem węzła przodka. Ale nawet tutaj, nie pokrywają. Powodem jest to, kiedy po raz pierwszy węzeł potomka usunięcia, jeśli spojrzeć na lewe poddrzewa węzła potomka w prawym dziecka. Gdy następnie usunąć węzeł przodka, będzie nigdy zejść że sub-tree ponieważ będziesz zawsze jechać w lewo po wejściu lewe poddrzewa węzła przodka prawym dziecka. Więc jeszcze raz, niezależnie od tego, co najpierw usunąć jesteś modyfikowanie różnych sub-drzew i tak wydaje się kolejność nie ma znaczenia.
- Innym przypadkiem jest sytuacja, gdy węzeł przodka usunąć pierwszy i okaże się, że minimalna węzeł jest dzieckiem węzła potomka. Oznacza to, że węzeł potomek będzie skończyć z jednym dzieckiem, a usunięcie jednego dziecka jest trywialne. Rozważmy teraz przypadek, w którym w tym scenariuszu usuniętego węzła potomka pierwszy. Następnie należy zastąpić wartość węzła potomka z jego prawej dziecka, a następnie usunąć właściwą dziecko. Następnie po usunięciu węzła przodka, kończy się znalezieniem samą minimalną węzeł (lewy dziecko starego usuniętego węzła, który jest również lewy dziecko zastępowanego węzła). Tak czy inaczej, w końcu z tej samej strukturze.
To nie jest rygorystyczny dowód; Są to tylko niektóre obserwacje zrobiłem. Za wszelką cenę, nie krępuj się grzebać dziury!