Can you summarize the following document?
        
  Vyvážené stromy se objevují v různých podobách, využívají se v datových strukturách pracujících na bázi seznamů nebo databází, kde se pracuje s operacemi vyhledávání, přidávání a mazání záznamů. Jako první představil 2-3 strom v roce 1970 John Hopcroft, bylo to vylepšení vyváženého binárního stromu. Později Rudolf Bayer a Ed McCreight zobecnili 2-3 strom pod pojmem B-strom, který byl dále zjednodušen do formy červeno-černého stromu.

  Vnitřní uzly neobsahují uvnitř data, ale obsahují některé informace o tom co je uloženo v jejich potomcích (podstromech). Tak jak je to zobrazeno na obrázku 1, kde levá vnitřní část pole (min S2) obsahuje minimální klíč ležící v prostředním podstromu (S2) a pravá vnitřní část uzlu (min S3) obsahuje minimální klíč ležící v pravém podstromu (S3). Stejně jako je tomu s uzlem se dvěma potomky. To z 2-3 stromů dělá tzv. vyhledávací stromy.  Při vkládání a mazání dat z 2-3 stromu je zapotřebí upravovat strukturu stromu, přizpůsobovat klíče v uzlech podle složení klíčů v listech a popřípadě měnit hloubku tohoto vyváženého stromu. U 2-3 stromu není zapotřebí tak často vyvažovat strom jako u binárního stromu, protože všechny listy jsou na stejné úrovni. Avšak je zapotřebí daleko častěji vyvažovat 2-3 strom než b-strom nebo 2-3-4 strom, kde je možné mít daleko více potomků u jednoho uzlu.

  Dva příklady 2-3 stromů s uloženými prvky 2, 5, 6, 8, 15, 17, 18 a 22.  2-3 stromy se stejnými daty mohou mít odlišnou strukturu. Pokud 2-3 strom obsahuje převážně uzly se dvěma potomky (větší hloubka stromu) vzrůstá náročnost operací (např. vyhledávání) s 2-3 stromem o n prvcích z O(logn) na O(logn).

  2-3 stromy se využívají v datových strukturách jako jsou seznamy nebo databáze, kde se pracuje se základními operacemi vyhledávání, vkládání a mazání prvků. Usnadňují tak daleko více práci s daty, než kdybychom měli data uspořádána libovolně v paměti (obtížné vyhledávání) nebo naopak uložená jako seznam v řadě za sebou (obtížné vkládání).

  Při vyhledávání dat podle klíče začínáme u Kořene stromu a postupujeme podle klíčových atributů shora dolů.  Tímto způsobem pokračujeme, až do poslední úrovně stromu, kde se nachází listy s daty.

  Při vkládání nové větve do 2-3 stromu je nutné vyhledat pozici, kam novou větev vložíme. Poté co je nalezena pozice, vložíme větev do příslušného rodiče "r".  Pokud se zvýší počet potomků "r" postupujeme obdobným způsobem směrem nahoru dokud nenarazíme na předka se dvěma potomky nebo na kořen se třemi potomky, kdy se zvýší hloubka 2-3 stromu o jedna, jak je zobrazeno postupně na obrázcích 7, 8, 9, 10.  Při každém vkládání je nutné přizpůsobit dané klíče uzlů podmínkám 2-3 stromu. Pro vkládání je možné využívat i složitější algoritmy, kde se nejdříve přizpůsobí struktura stromu vkládání. Například se přesune prvek (podstrom) do sousední větve, která není tolik zaplněná a tím se usnadní následné vkládání.

  Nejprve je nutné vyhledat větev, kterou budeme odebírat. Poté se odebere větev z jejího rodiče "r". Obdobným způsobem se pokračuje směrem nahoru a v případě potřeby se sníží hloubka 2-3 stromu o jedna, jak je to zobrazeno na obrázcích 12, 13, 14, 15, 16.  Operace jakou je vkládání a mazání se dají řešit různými algoritmy. Můžeme například nejdříve změnit strukturu stromu tak, abychom mohli jednoduše vložit nebo vyjmout větev. Můžeme provádět různá přeskupení, abychom využili, co nejvíce uzly se třemi potomky, kde je méně náročné vyhledávání, mazání dat a také jsou zde menší nároky na paměť počítače.

  Vytvořený 2-3 strom se může lišit od zde uvedených příkladů. Například listy mohou být uzly se dvěma klíči (daty) a data se nemusí vyskytovat jen v listech, ale v každém uzlu. Tímto způsobem se dají snížit nároky na paměť a některé operace se stromem.
2-3 strom je druh stromu, jehož každý vnitřní uzel má buď dva potomky a obsahuje jeden klíč, nebo má tři potomky a obsahuje dva klíče. Všechny listy leží ve stejné hloubce.