Strom je datová struktura, která reprezentuje hierarchické uspořádání dat. Skládá se z uzlů (vrcholů) a hran spojujících tyto uzly. Strom má vždy právě jeden kořenový uzel (root), ze kterého vedou hrany k ostatním uzlům. Mezi uzly platí vztah rodič–potomek (parent–child).
Pro každý strom musí platit, že je to graf, který:
- nesmí obsahovat cykly.
- mezi dvěma uzly existuje právě jedna cesta.
List je prvek stromu, který nemá potomky.
Využití stromů
Stromy se využívají v celé řadě oblastí informatiky a programování, například:
- Ukládání strukturovaných dat (například souborové systémy, XML/JSON dokumenty)
- Databázové indexy (například B-stromy, B+ stromy)
- Kompilátory (abstraktní syntaktické stromy)
- Vyhledávání a řazení dat
- Algoritmy pro směrování v sítích
Typy stromů
Existuje velké množství druhů stromů, lišících se svými vlastnostmi a účelem použití:
- Obecné (n-ární) stromy – uzel může mít libovolný počet potomků.
- Binární stromy – každý uzel má nejvýše dva potomky.
- Binární vyhledávací stromy (BST) – speciální binární stromy určené pro vyhledávání.
- Vyvážené stromy (například AVL, Red-Black) – binární vyhledávací stromy, které udržují vyváženou strukturu pro zajištění optimálnějšího vyhledávání.
- Heap (halda) – binární stromová struktura splňující haldové uspořádání.
- B-stromy, B+ stromy – používané v databázových systémech pro efektivní ukládání velkých objemů dat a následné dotazování se nad daty.
Význam B v B-stromech
Mohlo by se zdát, že B se u B-stromů znamená binární, ale to není pravda. Jedná se o balanced.
Binární stromy
Binární strom je strom, ve kterém každý uzel může mít maximálně dva potomky – levého a pravého.
Binární vyhledávací strom (BST)
Binární vyhledávací strom (Binary Search Tree) je binární strom, který splňuje podmínku, že pro každý uzel platí:
- všechny uzly v levém podstromu obsahují hodnoty menší než hodnota v uzlu,
- všechny uzly v pravém podstromu obsahují hodnoty větší než hodnota v uzlu.
Výhodou BST je průměrná časová složitost operací , pokud je strom vyvážený. Nevýhodou je, že se strom automaticky nevyvažuje, tedy v extrémním případě (například při vkládání seřazených hodnot) může vzniknout „degenerovaný“ strom s časovou složitostí nalezení prvku .

Operace v BST
- Vložení prvku – hodnota se vkládá do levého nebo pravého podstromu rekurzivně.
- Odstranění prvku
- Pokud uzel
- nemá potomky → odstraní se přímo
- pokud má jednoho potomka → uzel se nahradí potomkem
- pokud má dva potomky → nalezne se následník nebo předchůdce a hodnota se přepíše.
- Pokud uzel
- Získání (vyhledání) prvku – vyhledává se podle vztahu menší/větší, což umožňuje rychlý průchod stromem.
| Operace | Průměrná složitost | Nejhorší případ |
|---|---|---|
| Vložení | ||
| Vyhledání | ||
| Odstranění |
Binární halda
Binární halda (Binary Heap) je téměř úplný binární strom, který splňuje tzv. vlastnost haldy:
- u max-heapu platí, že hodnota rodiče je vždy větší nebo rovna hodnotám potomků,
- u min-heapu platí, že hodnota rodiče je menší nebo rovna hodnotám potomků.
Binární halda se využívá zejména pro implementaci prioritní fronty nebo algoritmů jako je heapsort.

Operace v binární haldě
- Vložení prvku – nový prvek se vloží na poslední volnou pozici a poté tzv. „vybublá“ nahoru, dokud není splněna vlastnost haldy.
- Odstranění prvku – u max-heapu se odstraní kořen, poslední prvek se přesune na kořenovou pozici a následně „propadá“ dolů, dokud není splněna vlastnost haldy.
- Získání min/max prvku – nalézá se vždy v kořeni pro min/max-heap.
| Operace | Složitost |
|---|---|
| Vložení | |
| Odstranění max/min | |
| Přístup k max/min |
Uložení do pole
Binární haldu lze mimo jiné uložit do jednorozměrného pole.
Platí následující vztahy:
- na indexu 0 je kořen
- levý potomek je na indexu , kde je index rodiče
- pravý potomek , kde je index rodiče