Definice: O stromu řekneme, že je binární, pokud je zakořeněný a každý vrchol má nejvýše dva syny, u nichž rozlišujeme, který je levý a který pravý.
Značení:
T(v) - podstrom obsahující vrchol v jako kořen a všechny jeho potomky
l(v),r(v) - jsou levý a pravý syn vrcholu v
L(v),R(v) - jsou T(l(v)) a T(r(v))
h(v) - hloubka stromu T(v), tedy nejdelší z cest z v do listů
Nemá-li vrchol syna tak funkce l(v), či r(v), podle toho jaký chybí je ∅ a hloubka h(∅)=−1.
Definice: Binární vyhledávací strom (BVS) je binární strom, jehož každému vrcholu v přiřadíme unikátní klíč k(v) z univerza. Přitom musí platit
a∈L(v)⟹k(a)<k(v)
b∈R(v)⟹k(b)>k(v)
Na takových stromech můžeme definovat několik operací
BvsShow - vyˊpis BVSVstup: Korˇen BVS v1. Pokud v=∅ pak skoncˇıˊme2. BvsShow(L(v))3. Vypıˊsˇeme k(v)4. BvsShow(R(v))BvsFind - hledaˊnıˊ klıˊcˇe v BVSVstup: Korˇen BVS v, hledanyˊ klıˊcˇxVyˊstup: Vrchol v s klıˊcˇem x, nebo ∅1. Pokud v=∅ vraˊtıˊme ∅.2. Pokud x=k(v), vraˊtıˊme v.3. Pokud x<k(v), vraˊtıˊme BvsFind(L(v)).4. Pokud x>k(v), vraˊtıˊme BvsFind(R(v)).BvsMin - hledaˊnıˊ minimaVstup: Korˇen BVS vVyˊstup: Vrchol v s nejmensˇıˊm klıˊcˇem x1. Pokud l(v)=∅ vraˊtıˊme v.2. Jinak vraˊtıˊme BvsMin(l(v)).BvsInsert - vklaˊdaˊnıˊ do BVSVstup: Korˇen BVS v, vklaˊdanyˊ klıˊcˇxVyˊstup: Novyˊ korˇen v1. Pokud v=∅ vytvorˇıˊme novyˊ vrchol v s klıˊcˇem x a skoncˇıˊme.2. Pokud x=k(v) klıˊcˇ jizˇ ve stromu je a nenıˊ nic potrˇeba.3. Pokud x<k(v), polozˇıˊme l(v)←BvsInsert(l(v),x).4. Pokud x>k(v), polozˇıˊme r(v)←BvsInsert(r(v),x).
Mazání má problém v tom že mažeme-li ne-list, tak mohou nastat dvě situace, vrchol má jednoho syna a tedy jen náš mazaný v nahradíme jeho synem. Pokud mazaný vrchol má oba syny, tak určíme nejlevější vrchol pravého podstromu jako další v řadě, ten vystřihneme a nahradí náš vrchol v a sám měl maximálně jednoho syna a tedy jen ho přepojíme.
BvsDeleteVstup: Korˇen BVS v, mazanyˊ klıˊcˇxVyˊstup: Novyˊ korˇen v1. Pokud v=∅ tak x ve stromu nebyl a vraˊtıˊme ∅.2. Pokud x<k(v), polozˇıˊme l(v)←BvsDelete(l(v),x).3. Pokud x>k(v), polozˇıˊme r(v)←BvsDelete(r(v),x).4. Pokud x=k(v):5. Pokud l(v)=r(v)=∅ vraˊtıˊme ∅.6. Pokud l(v)=∅ vraˊtıˊme r(v).7. Pokud r(v)=∅ vraˊtıˊme l(v).8. s←BvsMin(r(v))9. k(v)←k(s)10. r(v)←BvsDelete(r(v),s)11. Vraˊtıˊme v.
AVL stromy
Definice: Binární vyhledávací strom je hloubkově vyvážený pokud pro každý jeho vrchol v platí
∣h(l(v))−h(r(v))∣≤1.
Stromy splňující tuto podmínku jsou zvané AVL stromy.
Tvrzení: AVL strom na n vrcholech má hloubku Θ(logn).