9. Stromy9.4 Binárny strom - príkladTypickým príkladom binárneho stromu je vlastný rodokmeň. Jednotlivé vcholy tohto stromu predstavujú členov rodiny (informácie o nich - napr. meno, rok narodenia, zamestnanie a pod.)
Napíšeme postupne funkcie, pomocou ktorých budeme s naším rodokmeňom pracovať. Budeme predpokladať, že žiadny dvaja naši príbuzní nemajú rovnaké meno (pre jednoduchosť). Definujme si najskôr typ vrcholu:
Náš strom je zatiaľ prázdny. Vytvorme teda prvý vrchol - koreň stromu:
Alebo si rovno pripravme funkciu na vytvorenie nového vrcholu - bude vracať ukazovateľ na vytvorený vrchol: Koreň stromu potom vytvoríme takto:strom = novy("ja"); Teraz by sme chceli do stromu pridať ďalších členov rodiny. Každý nový prvok pridáme na správne miesto - t.j. ako ľavého alebo pravého syna určeného vrcholu.
Funkcia strcmp porovnáva dva reťazce. Ak sú rovnaké, vráti hodnotu 0! Pridajme teda do stromu ďalší vrchol: Vytvorený rodokmeň ("rodostrom") samozrejme chceme zviditeľniť:
| ||
Precvičme siNapíšte funkciu, ktorá nám umožní zrušiť naraz celý strom (uvoľniť pamäť alokovanú pre jednotlivé vrcholy stromu). | ||
[Riešenie] | ||
Napíšte funkciu, ktorá nám umožní zistiť, či sa v našom rodokmeni nachádza človek s daným menom (nájde daný vrchol). Po skončení tejto funkcie chceme mať navyše k dispozícii aj ukazovateľ na príslušný vrchol. | ||
[Riešenie] | ||
Pri
konštrukcii stromu je ideálne, ak má minimálnu výšku (vyhľadávnie je
efektívnejšie). Na to je potrebné, aby sme na každej úrovni,
s výnimkou poslednej, umiestnili maximálny počet vrcholov.
Skonštruujeme takto tzv. dokonale vyvážený strom, v ktorom
pre každý vrchol platí, že počet vrcholov v jeho ľavom
a pravom podstrome sa líši najviac o jednotku. | ||
[Riešenie] | ||