Delesjon (generelt) er ikke kommutativ. Her er et moteksempel:
4
/ \
3 7
/
6
Hva om vi sletter 4 og 3?
Når vi sletter 4, får vi seks som ny root:
6
/ \
3 7
Slette tre endrer ikke på treet, men gir oss dette:
6
\
7
Hva om vi sletter tre og fire?
Når vi sletter tre treet ikke endres:
4
\
7
/
6
Men når vi nå slette fire, blir den nye roten 7:
7
/
6
De to resulterende trær ikke er det samme, og derfor sletting er ikke kommutativ.
OPPDATER
Jeg har ikke lest den begrensning at dette er når du alltid slette en node med 2 barn. Min løsning er for det generelle tilfellet. Jeg skal oppdatere det hvis / når jeg kan finne en counter-eksempel.
en annen oppdatering
Jeg har ikke konkrete bevis, men jeg kommer til å gjette:
I det generelle tilfellet, håndterer du slettinger forskjellig basert på om du har to barn, ett barn eller ingen barn. I counter-eksemplet jeg gitt, jeg først slette en node med to barn og deretter en node med ett barn. Etter det jeg slette en node uten barn og deretter en annen node med ett barn.
I det spesielle tilfellet bare slette noder med to barn, vil du vurdere saken der begge noder er i samme sub-treet (siden det ville ingen rolle om de er i forskjellige sub-trær, og du kan være sikker på at generelle struktur vil ikke endres basert på rekkefølgen av delesjonen). Hva du virkelig trenger å bevise er om rekkefølgen på sletting av noder i samme sub-treet, der hver node har to barn, saker.
Tenk to noder A og B, hvor A er en stamfar til B. Deretter kan du avgrense spørsmålet være:
Er sletting kommutativ når du vurderer sletting av to noder fra et binært søketre som har en stamfar-kommer forhold til hverandre (dette ville innebære at de er i samme sub-treet)?
Når du sletter en node (la oss si A), du traversere riktig sub-treet for å finne minimum element. Denne noden vil være en bladnode og kan aldri være lik B (fordi B har to barn, og kan ikke være en bladnode). Du vil da erstatte verdien av A med verdien av denne blad-node. Hva dette betyr er at den eneste strukturelle endringer til treet er utskifting av en verdi med verdien av blad-node, og tap av blad-node.
Den samme prosessen er involvert for B. Det vil si at du erstatte verdien av noden og erstatte et blad-node. Så generelt, når du sletter en node med to barn, er den eneste strukturelle endringen endringen i verdien av noden du sletter, og sletting av bladnoden som er verdien du vil bruke som erstatning .
Så spørsmålet er videreutviklet:
Kan du garantere at du alltid vil få samme erstatning node uavhengig av rekkefølgen på sletting (når du er alltid å slette en node med to barn)?
Svaret (tror jeg) er ja. Hvorfor? Her er noen observasjoner:
- La oss si du sletter kommer node først og stamfar node andre. Sub-tre som ble endret da du slettet kommer noden er ikke i venstre sub-treet til stamfar noden rett barn. Det betyr at dette sub-treet forblir upåvirket. Hva dette betyr også er uavhengig av rekkefølgen av delesjon, to forskjellige er undertrær modifisert og derfor vil driften er kommutativ.
- Igjen, la oss si du sletter kommer node først og stamfar node andre. Sub-tre som ble endret da du slettet kommer node er i venstre sub-treet til stamfar noden rett barn. Men også her er det ingen overlapping. Årsaken er når du sletter kommer node først, du ser på venstre sub-tre av kommer nodens høyre barn. Når du deretter slette stamfar node, vil du aldri gå ned som sub-treet, siden du vil alltid gå mot venstre når du går inn i stamfar nodens høyre barnets venstre sub-treet. Så igjen, uavhengig av hva du sletter første du endrer forskjellige sub-trær og så ser det ut for spiller ingen rolle.
- Et annet tilfelle er hvis du sletter stamfar node først, og du finner ut at minimumspunktet er et barn av kommer node. Dette betyr at kommer noden vil ende opp med ett barn, og slette ett barn er trivielt. Nå vurdere saken hvor i dette scenariet, slettet du etterkommer node først. Da ville du erstatte verdien av kommer node med sin rett barnet og deretter slette den rette barn. Så når du sletter stamfar node, ender du opp med å finne den samme minimumspunktet (den gamle slettet nodens venstre barnet, som også er erstattet nodens venstre barn). Uansett, ender du opp med samme struktur.
Dette er ikke en streng bevis; Dette er bare noen observasjoner jeg har gjort. For all del, gjerne stikke hull!