AA strom: Porovnání verzí
Smazaný obsah Přidaný obsah
m styl |
mBez shrnutí editace |
||
Řádek 1:
'''AA strom''' ('''Arne Andersson strom''') je [[červeno-černý strom]] s jedním přídavným pravidlem. Na rozdíl od červeno-černého stromu mohou být červené uzly vkládány pouze do pravého potomka, což znamená, že žádný červený uzel nemůže být levý potomek. Takto získáme strom [[izomorfismus|izomorfní]] s [[B-strom|B-stromem]] třetí úrovně ([[2-3 strom]]) místo [[B-strom|B-stromu]] čtvrté úrovně ([[2-3-4 strom]]), který je izomorfní s [[červeno-černý strom| červeno-černým stromem]]. Značně se tak usnadní implementace stromových operací.
Pro správné vyvážení
* * * * * * *
Řádek 17:
*
Pro další úvahy
Původní strom:
Řádek 31:
7 9
4,3
Řádek 59:
# Levý potomek nesmí mít stejnou úroveň, jako jeho rodič
#
Pokud bychom chtěli
# Červené levé hrany nejsou povoleny
# Dvě po sobě jdoucí červené hrany nejsou povoleny
Díky vlastnostem AA stromu, kdy může být pouze pravý potomek červený, jsou
== Split a skew ==
void Skew (struct node *oldparent)
Řádek 112:
== Vkládání ==
Po vkládání je stejně jako u ostatních binárních vyvážených stromů nutné
Pokud se zvýší úroveň uzlu, je potřeba vykonat operaci skew. Může se stát, že předchozí rodič uzlu (nyní potomek) a nebo jeho předchozí potomek (nyní prapotomek) jsou červení. Tím pádem jsme opět v situace, kdy musíme provést split.
Jako názornou ukázku vybudujeme AA strom. Nejdříve vložíme 0 do prázdného stromu, tím neporušíme žádné pravidlo a úroveň tohoto uzlu bude 1. Následně vložíme uzel 1 a opět nejsou porušena žádná pravidla. Po vložení uzlu 2 už musíme použít operaci split neboť je porušeno druhé pravidlo. Split provede levou rotaci a zvýší úroveň uzlu 1 o 1.
0,1 1,2
|