Vkladanie prvku do haldy

Predstavme si, že už odniekiaľ máme maximovú haldu: niekto už vybral konkrétny tvar stromu a rozmiestnil prvky do jeho vrcholov tak, aby spĺňali podmienku haldy. Ako vieme do takejto haldy pridať ďalší prvok?

Spravíme to veľmi jednoducho. Začneme tým, že nový prvok pridáme ako nový list kamkoľvek do stromu. Označme nový vrchol $v$ a jeho otca $u$. Vieme, že doteraz každý vrchol spĺňal podmienku haldy. Keď sme do strom pridali vrchol $v$, jediné miesto, kde sme ju mohli pokaziť, je vrchol $u$, presnejšie hrana z $u$ do $v$.

Ak je táto hrana v poriadku (čiže ak je prvok vo vrchole $u$ väčší alebo rovný od nového prvku vo vrchole $v$), máme opäť haldu a sme hotoví. V opačnom prípade treba haldu upraviť.

Počas úpravy nebudeme vôbec meniť tvar našej haldy, len šikovne povymieňame prvky medzi sebou. Začneme v práve pridanom liste. Ako opraviť podmienku haldy pre hranu $uv$? Jednoducho: vymeníme prvky uložené v týchto dvoch vrcholoch.

V tomto okamihu už máme podmienku haldy určite splnenú vo vrchole $u$. Tento vrchol mohol mať pod sebou aj iných synov okrem $v$, no keďže pôvodná halda bola v poriadku a výmenou sme do vrcholu $u$ presunuli prvok väčší ako ten, čo tam bol doteraz, podmienku haldy sme tým nemali ako pokaziť.

Opäť teda existuje jediné miesto v celom strome, kde môže ešte byť pokazená podmienka haldy. Týmto miestom je hrana z vrcholu $u$ do jeho otca. A toto je presne tá istá situácia, v ktorej sme boli na začiatku (len sme v strome o úroveň vyššie). Opakujeme teda ten istý postup.

V najhoršom prípade tento postup skončí tým, že sa dostaneme až do koreňa celej haldy. Ten už nad sebou nič ďalšie nemá, takže v tej chvíli už je všade splnená podmienka haldy a môžeme skončiť.

Postup, ktorý sme si práve popísali, sa zvykne nazývať bublanie dohora, lebo sa naň dá dívať tak, že naposledy pridaný prvok postupnestúpa haldou až kým nepríde na miesto, kam patrí.