Fa (fák) A fa egy hierarchikus adatszerkezetet, amelyben egy elmnek akár több rákövetkezője, de legfeljebb egy megelőzője lehet. - Minden elemeknek több rákövetkezője, gyereke, leszármazottja lehet. - A gyökérelem a fa azon eleme, amelynek nincs megelőzője, szülője. Az üres fa kivételével minden fának van gyökéreleme. A gyökérelemen kívül az összes elemnek pontosan egy megelőzője van. - Minden elem pontosan egy úton érhető el a gyökérelemtől. - Út: az adatelemnek olyan sorozata, ahol az egymást követő elemek egymásnak rákövetkezői, leszármazottjai. Az út hosszán az útban található élek számát értjük. - Levél: a fa azon elemei, amelyeknek nincs rákövetkezőjük. - Belső csúcs: a fa nem levél elemei. - A fákkal kapcsolatban beszélhetünk szintekről, egy elem szintje megegyezik a gyökérelemtől vett távolságával. A nulladik szinten a gyökérelem van, az első szinten a gyökérelem rákövetkezői, stb. - A maximális szintszámot a fa magasságának vagy mélységének nevezzük. - Minden közbenső elem egy részfa gyökereként tekinthető, így a fa részfákra bontható. Tehát a fát lehet rekurzívan is definiálni, azaz a fa áll egy gyökérelemből és a leszármazottai részfáiból. - Ha egy elemnek nincs utódja, akkor szélső elemnek vagy levélnek, a többi csúcsot belső elemnek, vagy elágazási pontnak nevezzük. - Erdőnek nevezünk néhány, (esetleg 0) diszjunkt fából álló halmazt: Másképp, erdőt kapunk, ha egy fából elhagyjuk a gyökeret. Egy erdőhöz egy pontot adva fát adunk. Rekurzió Rekurzív egy függvény, ha a függvény részszámításaihoz önmagát hívja meg. Egy feladat rekurzív, ha a feladat megoldásához vezető lépések során: - találunk egy legegyszerűbb esetet, melyben a megoldás magától értetődik - találunk egy olyan ismételt egyszerűsítési folyamatot, mely alapján véges lépésben eljuthatunk a legegyszerűbb esethez. Minden egyes lépésnél feltételezzük, hogy a következő, egyszerűbb esetnek már megvan a megoldása. Rekurzív eljárás, függvény Egy metódust (eljárást vagy függvényt) rekurzívnak nevezünk, ha meghívja saját magát. - Közvetlen rekuzió: a metódust közvetlenül saját magát hívja meg. Pl. r1 metófus hívja az r1-esetet - Közvetett rekuzió: a metódus csak közvetve hívja meg magát egy másik metódus hívásán keresztül. Pl. r1 hívja r2-t, r2 pedig r1-et. Egy rekurzív metódusban szerepelnie kell: - valaminek, ami a hívások során állandóan változik, és elvileg elérhet egy küszöböt. - egy olyan utasításnak, mely ezt a valamit a küszöb felé viszi. - egy leállító feltételnek, mely arról a bizonyos valamiről eldönti, elérte-e a küszöböt. Ha igen, akkor nem történik több rekurzív hívás. Az alábbi példa egy általános fa adatszerkezetet mutat be, amelyben egy csomópont több gyermekkel rendelkezhet. A fa alapvető működését mutatjuk be, beleértve a csomópontok hozzáadását, a fa bejárását és egy egyszerű keresési műveletet.