Delece (obecně) není komutativní. Zde je protipříklad:
4
/ \
3 7
/
6
Co kdybychom smazat 4 a poté 3?
Když jsme se odstranit 4, dostaneme 6 jako nový kořen:
6
/ \
3 7
Mazání 3 nemění strom, ale dává nám to:
6
\
7
Co kdybychom smazat 3 a poté 4?
Když jsme se odstranit 3 strom se nemění:
4
\
7
/
6
Nicméně, když jsme se odstranit 4, nový kořenový stává 7:
7
/
6
Dva výsledné stromy nejsou stejné, a proto odstranění není komutativní.
AKTUALIZACE
Nečetl jsem omezení, že to je, když budete vždy smazat uzel se 2 dětmi. Moje řešení je pro obecný případ. Budu aktualizovat v případě, / když najdu pult-příklad.
DALŠÍ UPDATE
Nemám konkrétní důkaz, ale budu hádat:
V obecném případě, zvládnout odstranění různě v závislosti na tom, zda máte dvě děti, jedno dítě, nebo žádné děti. V oblasti boje proti příkladu I za předpokladu, jsem nejprve odstranit uzel se dvěma dětmi a potom uzel s jedním dítětem. Za to, že jsem vymazat uzel s žádnými dětmi a pak další uzel s jedním dítětem.
Ve zvláštním případě, že odstraňujete pouze uzly se dvěma dětmi, budete chtít vzít v úvahu případ, kdy oba uzly jsou ve stejném sub-tree (protože to by nebylo jedno, jestli jsou v různých dílčích stromů, můžete si být jisti, že celková struktura nebude měnit v závislosti na pořadí delece). To, co opravdu potřebujeme, aby prokázal, zda pořadí vymazání uzlů ve stejném sub-strom, kde každý uzel má dvě děti, záležitosti.
Vezměme si dva uzly A a B, kde A je předek B. Pak můžete dále upřesnit otázku takto:
Je vypuštění komutativní když uvažujete o odstranění dvou uzlů z strom binárního vyhledávání, které mají předek-potomek vztah k sobě (to by znamenalo, že jsou ve stejném sub-tree)?
Při odstranění uzlu (řekněme), můžete procházet správný sub-strom najít minimální prvek. Tento uzel bude koncový uzel a nikdy nemůže být stejná jako B (protože B má dvě děti a nemůže být koncový uzel). Ty by pak nahraďte hodnotu s hodnotou tohoto listu uzlu. To znamená, že jediná strukturální změna stromu je nahrazení hodnotu, kterou je s hodnotou listu uzlu, a ztráta listového uzlu.
Stejný postup se podílí na B. To znamená, že jste nahradit hodnotu uzlu a nahradit list uzel. Takže obecně, když odstraníte uzel se dvěma dětmi, jediná strukturální změna je změna v hodnotě uzlu, který odstraňujete a vypuštění listového uzlu, kdo je hodnota, kterou používáte jako náhrada .
Takže otázka je dále rafinovaný:
Můžete zaručit, že budete vždy mít stejný náhradní uzel bez ohledu na pořadí delece (pokud jste vždy smazání uzlu se dvěma dětmi)?
Odpověď (myslím) je ano. Proč? Zde je několik pozorování:
- Řekněme, že jste odstranit potomek uzlu první a předek uzlu sekundu. Sub-tree, který byl změněn, pokud jste odstranili uzel potomek je to v levém podstromu pravého dítěte předek uzlu. To znamená, že sub-tree zůstává nedotčeno. Co to také znamená, že je bez ohledu na pořadí delece dva různé dílčí stromy jsou upraveny, a proto je operace komutativní.
- Opět platí, že řekněme, že odstranit potomek uzlu první a předek uzlu sekundu. Sub-tree, který byl změněn, pokud jste odstranili uzel potomek je v levém podstromu pravého dítěte předek uzlu. Ale i tady, není žádný přesah. Důvodem je, když odstraníte uzel potomek Nejprve se podíváme na levém sub-strom potomka uzlu pravé dítě. Když se pak odstraňte uzel předka, budete nikdy jít dolů, že sub-tree, protože budete vždy jít doleva po zadání předek uzlu pravá dítěte levé sub-strom. Takže znovu, bez ohledu na to, co smažete první měníte různé sub-stromy, a tak se zdá, pořadí nezáleží.
- Dalším případem je, když odstraníte uzel předka jako první a vy zjistíte, že minimální uzel je potomkem potomka uzlu. To znamená, že potomek uzlu skončí s jedním dítětem a vymazání jedno dítě je triviální. Nyní uvažujme případ, kdy v tomto případě nejprve odstraněné potomek uzlu. Pak byste měli nahradit hodnotu potomka uzlu s jeho pravého potomka a odstranit ten správný dítě. Pak, když odstraníte uzel předka, můžete skončit najít stejnou minimální uzel (vlevo dítě starého odstraněného uzlu, který je také levý dítě vyměněné uzlu). Ať tak či onak, můžete skončit s stejnou strukturu.
Nejedná se o přísný důkaz; To jsou jen některé postřehy které jsem udělal. Všemi prostředky, neváhejte hrabat díry!