Deletie (in het algemeen) is niet verwisselbaar. Hier is een tegenvoorbeeld:
4
/ \
3 7
/
6
Wat als we verwijderen 4 en vervolgens 3?
Als we verwijderen 4, krijgen we 6 als de nieuwe root:
6
/ \
3 7
Het verwijderen van 3 niet de boom te veranderen, maar geeft ons dit:
6
\
7
Wat als we verwijderen 3 en 4?
Als we verwijderen 3 de boom niet verandert:
4
\
7
/
6
Echter, wanneer we nu verwijderen 4, de nieuwe wortel wordt 7:
7
/
6
De twee resulterende bomen zijn niet hetzelfde, dus verwijdering niet commutatief.
BIJWERKEN
Ik heb gelezen niet de beperking dat dit is wanneer je altijd een knooppunt te verwijderen met 2 kinderen. Mijn oplossing is voor het algemene geval. Ik zal het updaten als / wanneer ik kan een tegenvoorbeeld vinden.
Weer een update
Ik heb geen concreet bewijs, maar ik ga een gok te wagen:
In het algemene geval, het handvat je verwijderingen anders, afhankelijk van of u hebben twee kinderen, een kind, of geen kinderen. In de tegenvoorbeeld I ontvangen, ik eerst een knooppunt twee kinderen en een knooppunt met een kind verwijderen. Daarna heb ik een knoop zonder kinderen en vervolgens een ander knooppunt met een kind te verwijderen.
In het speciale geval van alleen te verwijderen nodes met twee kinderen, je wilt het geval dat beide knooppunten in dezelfde sub-boom (omdat het niet van belang zou zijn als ze in verschillende sub-bomen te overwegen, je kunt er zeker van zijn dat de opzet niet veranderen in de volgorde van deletie). Wat je echt nodig hebt om te bewijzen is of de volgorde van de schrapping van knooppunten in dezelfde sub-boom, waarbij elke knoop heeft twee kinderen, zaken.
Beschouw twee knooppunten A en B, waarbij A een voorouder van B. Dan kunt u verder verfijnen van de vraag te zijn:
Is verwijdering commutatieve wanneer u overweegt het schrappen van twee knooppunten van een binaire zoekboom die een voorouder-afstammeling relatie met elkaar te maken hebben (dit zou betekenen dat ze in dezelfde sub-boom)?
Wanneer u een knooppunt verwijderen (laten we zeggen A), de juiste sub-boom doorkruisen tot het minimum element te vinden. Dit knooppunt zal een blad knooppunt en kan nooit gelijk zijn aan B zijn (omdat B heeft twee kinderen en kan niet een blad node). Je zou dan in de plaats van de waarde van A met de waarde van deze leaf-knooppunt. Wat dit betekent is dat de enige structurele wijziging van de boom is de vervanging van A's waarde met de waarde van het blad-knooppunt, en het verlies van het blad-knooppunt.
Hetzelfde proces is betrokken voor B. Dat wil zeggen dat u de waarde van het knooppunt te vervangen en vervangen van een leaf-knooppunt. Dus in het algemeen, als je een knooppunt met twee kinderen te verwijderen, de enige structurele verandering is de verandering in de waarde van het knooppunt u verwijdert, en het schrappen van het blad knooppunt wiens waarde die u gebruikt als vervanging .
Dus de vraag is verder verfijnd:
Kunt u garanderen dat u altijd krijgt hetzelfde vervanging knooppunt ongeacht de volgorde van de verwijdering (als je altijd het verwijderen van een knooppunt met twee kinderen)?
Het antwoord (denk ik) is ja. Waarom? Hier zijn een paar opmerkingen:
- Laten we zeggen dat je de afstammeling knooppunt eerste en de voorloper knooppunt tweede verwijderen. De sub-boom die is gewijzigd wanneer u de afstammeling knooppunt verwijderd is niet in de linker sub-boom van het recht van het kind van de voorouder node. Dit betekent dat deze sub-boom blijft onaangetast. Dit betekent ook ongeacht de volgorde van deletie, twee verschillende sub-bomen gemodificeerd en daardoor de werking commutatief.
- Nogmaals, laten we zeggen dat je de afstammeling knooppunt eerste en de voorloper knooppunt tweede verwijderen. De sub-boom die is gewijzigd wanneer u de afstammeling knooppunt verwijderd is in de linker sub-boom van het recht van het kind van de voorouder node. Maar ook hier is er geen overlap. De reden hiervoor is wanneer je de afstammeling knooppunt eerste verwijderen, je kijkt naar de linker sub-boom van de afstammeling knooppunt recht kind. Als je dan de voorouder knooppunt verwijderen, zul je nooit meer gaan dat sub-boom omdat je altijd gaan naar links na het linker sub-boom de voorouder knooppunt rechts-kind in te voeren. Dus nogmaals, ongeacht wat je voor het eerst verwijdert u wijzigt verschillende sub-bomen en zo lijkt volgorde maakt niet uit.
- Een ander geval is als je de voorouder knooppunt eerste verwijderen en u vindt dat de minimum-knooppunt is een kind van de afstammeling knooppunt. Dit betekent dat de nakomeling knooppunt zal eindigen met een kind, en verwijderen van een kind triviaal. Beschouw nu het geval dat in dit scenario, u hebt verwijderd de afstammeling knooppunt eerste. Dan zou je de waarde van de afstammeling knooppunt vervangen door haar recht kind en verwijder vervolgens de juiste kind. Dan wanneer u de voorvader knooppunt verwijderen, je uiteindelijk het vinden van de dezelfde minimum knooppunt (linker kind van de oude verwijderde knooppunt, die ook links kind het vervangen node). Hoe dan ook, je eindigt met dezelfde structuur.
Dit is niet een rigoureuze bewijs; dit zijn slechts enkele opmerkingen die ik heb gemaakt. Door alle middelen, voel je vrij om gaten te porren!