Vyhledávací stromy

Search(T,x) - vyhledá x v T
Minimum(T) - vyhledá minimální prvek v T
Maximum(T) - vyhledá maximální prvek v T
Predecessor(T,x) - vyhledává předchůdce x v T
Successor(T,x) - vyhledá následníka x v T
Insert(T,x) - vloží x do T
Delete(T,x) - odstraní x z T

Binární vyhledávací stromy BST

Procházení stromu

Výpis klíču

Vyhledávání ve stromu

function Search(x,k)
    if x is None or k == x.key then
        return x
    if k < x.key then
        return Search(x.left,k)
    else
        return Search(x.right,k)

Minimální a maximální klíč

Předchůdce a následovník

Následník uzlu x

Přidání nového uzlu

Odstranění uzlu

  1. uzel nemá žádného syna - smažeme
  2. uzel z má jediného syna - syna přesuneme na pozici uzlu $z$ tak, že otec uzlu $z$ se stane otcem jeho syna
  3. uzel z má dva syny
    • potřebujeme najít uzel $y$ který nahradí uzel $z$
    • vhodným kandidátem je následník uzlu $z$ (symetricky předchůdce z)
    • protože pravý podstrom uzlu z je neprázdný, tak následník $y$ uzlu $z$ je uzel s nejmenším klíčem v pravém podstromě uzlu $z$
    • $y$ nemá levého syna, proto ho můžeme přesunout na pozici $z$
    • $y$ je nahrazen svým pravým synem
function Delete(T,z)
    if z.left is None then
        Transplant(T,z,z.right)
    else
        if z.right is None then
            Transplant(T,z,z.left)
        else
            y = Minimum(z.right)
            if y.parent != z then
                Transplant(T,y,y.right)
                y.right = z.right
                z.right.parent = y
            Transplant(T,z,y)
            y.left = z.left
            z.left.parent = y

Pomocná funkce transplant

function Transplant(T,u,v)
    if u.parent is None then
        T.root = v
    else
        if u == u.parent.left then
            u.parent.left = v
        else
            u.parent.right = v
    if v is not None then
        v.parent = u.parent

Složitost

Vyvážené binární vyhledácí stromy

Modifikace datových struktur

Intervalové stromy