Rekurzió. Programozás alapjai C nyelv 9. gyakorlat. Rekurzív algoritmus. Rekurzív algoritmus fajtái. Példa: n! (2) Példa: n!

Hasonló dokumentumok
Programozás alapjai C nyelv 9. gyakorlat. Rekurzió. Rekurzív algoritmus

Információs Technológia

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Programozás alapjai II. (7. ea) C++

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai C nyelv 11. gyakorlat. Preprocesszor. Makrók (#define)

A programozás alapjai 1 Rekurzió

Preprocesszor. Programozás alapjai C nyelv 11. gyakorlat. Makrók (2) Makrók (#define) Makrók (3) #include

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozás 6. Dr. Iványi Péter

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

INFORMATIKA javítókulcs 2016

Programozás C nyelven 6. ELŐADÁS. Sapientia EMTE

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Programozás II. Fájlkezelés

Algoritmusok és adatszerkezetek gyakorlat 07

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Adatszerkezetek és algoritmusok

Programozás alapjai 9.Gy: Struktúra 2.

Programozási segédlet

Információs Technológia

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

INFORMATIKA tétel 2019

Adatbázis rendszerek Gy: Algoritmusok C-ben

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

A félév során előkerülő témakörök

Programozás alapjai 8.Gy: Program struktúra

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Programozás I gyakorlat. 10. Stringek, mutatók

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Például számokból álló, egyszeresen láncolt lista felépítéséhez az alábbi struktúra definíciót használhatjuk:

Programozás I gyakorlat. 5. Struktúrák

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Elemi adatszerkezetek

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

Algoritmusok pszeudókód... 1

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

7. gyakorlat Sorozatok, Fájlkezelés

Adatbázisrendszerek I. Fájlszintű adattárolás C-ben

Programozás I gyakorlat

Információs Technológia

Rekurzív algoritmusok

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

Algoritmusok pszeudókód... 1

III. Adatszerkezetek és algoritmusok

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

BASH script programozás II. Vezérlési szerkezetek

Alprogramok, paraméterátadás

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Országzászlók (2015. május 27., Sz14)

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Programozás Minta programterv a 1. házi feladathoz 1.

Szövegek C++ -ban, a string osztály

Programozás I. gyakorlat

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

Programozás I. 5. Előadás: Függvények

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók. Dr. Bécsi Tamás 7. Előadás

Vezérlési szerkezetek

10. gyakorlat Tömb, mint függvény argumentum

Adatszerkezetek 7a. Dr. IványiPéter

INFORMATIKA tétel 2018

Tartalomjegyzék Algoritmusok - pszeudókód

Amortizációs költségelemzés

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Kupac adatszerkezet. 1. ábra.

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Mutatók és mutató-aritmetika C-ben március 19.

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

1. Alapok. Programozás II

Átírás:

Programozás alapjai C nyelv 9. gyakorlat Szeberényi Imre BME IIT <szebi@iit.bme.hu> Rekurzió A feladat algoritmusa eleve rekurzív formában adott (ld: n!). A valójában nem rekurzív de valami hasznot húzunk a rekurzióból, pl. sorrend fordítás (ld: számkiíró). Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -1- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -2- Rekurzív algoritmus Megkeressük azt a legegyszerűbb esetet amiben a megoldás már magától értetődik. Megkeressük, hogy hogyan vezethető vissza ismételt egyszerűsítésekkel a legegyszerűbb esetre a feladat. Rekurzív algoritmus fajtái. Hogyan hívja önmagát közvetlen (a hívja a-t) közvetett (a hívja b-t és b hívja a-t) Hányszor, hány helyen hívja magát egyszerű többszörös Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -3- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -4- Példa: n! Rekurzívan adott az algoritmus. (Ennek ellenére nem a rekurzió a leghatékonyabb megvalósítás.) n! = n * (n-1)!, ha n > 1, egyébként 1. long fakt(int n) if (n > 1) return(n*fakt(n-1)); return(1); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -5- fakt(4) return(4*fakt(3)) 24 Példa: n! (2) long fakt(int n) if (n > 1) return(n*fakt(n-1)); return(1); return(3*fakt(2)) return(2*fakt(1)) return(1) 2*1 3*2 4*6 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -6-

Példa: számkiíró Írjunk ki 3-as számrendszerben: n = a n *3 n + a n-1 *3 n-1 +... + a 1 *3 1 + a 0 Ha elosztjuk 3-mal akkor a maradék adja az utolsó jegyet. Gond: ezt a jegyet kellene utoljára kiírni. lehetne tárolni egy tömbben, de... Megoldás: a rekurzív hívás után írunk ki (a rekurzív hívások során tárolódnak a már kiszámított jegyek). Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -7- Példa: számkiíró (2) void harki(int n) int e, m; m = n % 3; if (e = n / 3) harki(e); printf( %d, m); maradék egészrész csak visszatérés után írunk ki Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -8- Példa: számkiíró (3) Példa: Hanoi tornyai legenda harki(34) m 1 1 harki(11) m 2 2 harki(3) m 0 0 1 void harki(int n) int e, m = n % 3; if (e = n / 3) harki(e); printf( %d, m); harki(1) m 1 34 10 =1021 3 Feladat:? Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -9- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -10- Algoritmus a legenda szerint Hanoi tornyai folyt. Átviszem a felső 99 korongot az ezüstrúdra, majd a 100. korongot átrakom az aranyrúdra. Ezután átviszem az ezüstrúdon levő korongokat az aranyrúdra. Elég öreg vagyok, ezért inkább a tanítványomra bízom a 99 korong átrakását. Elegendő nekem a 100. korong mozgatása. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -11- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -12-

Hanoi tornyai folyt. Hanoi tornyai folyt. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -13- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -14- Hanoi tornyai folyt. Hanoi tornyai folyt. void Hanoi(int n, char forras, char cel, char seged) if (n > 0) Hanoi(n-1, forras, seged, cel); printf("%d. korongot %c -> %c\n", n, forras, cel); Hanoi(n-1, seged, cel, forras); main() Hanoi(4, 'R', 'A', 'E'); Hanoi(6, 'R', 'A', 'E'); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -15- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -16- Rekurzió összefoglalása A rekurzív algoritmusok sokszor kézenfekvőnek tűnnek, de nem biztos, hogy rekurzívan kapjuk a leghatékonyabb megoldást. Rekurzív algoritmus helyességét sokszor egyszerűbb belátni. A legtöbb rekurzió ciklussá alakítható. Rekurzív adatszerkezetek i Fa NULL NULL typedef struct fa_str int i; struct fa_str *bal; struct fa_str *jobb; fa_elem, *fa_poi; Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -17- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -18-

Fa Fa 15 22 91 620 35231 812 15 6 20 6 20 3 8 31 2 5 12 22 91 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -19- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -20- Fa (elfajuló) Feladat 1 5 12 20 22 31 91 Olvassunk be a binfa.txt állományból file végéig egész számokat. Tároljuk az adatokat bináris fában! Keressünk meg egy adott elemet, és írjuk ki, hogy hányszor fordult elő! Írjuk ki nagyság szerint rendezve az adatokat és azok előfordulási számát! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -21- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -22- Vázlat (adatszerkezet) typedef struct fa_str int i; /* értek */ int sz; /* számláló */ struct fa_str *bal; /* bal mutató */ struct fa_str *jobb; /* jobb mutató */ fa_elem, *fa_poi; Vázlat (algoritmus) gyoker = NULL fp = állomány_megnyitása() while folvas(fp, i) gyoker = faepit(gyoker, i) folvas(stdin, i) p = keres(gyoker, i) if (p!= NULL) elem_kiirása nem_találtuk_meg fakir(gyoker) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -23- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -24-

Alprogram spec. - faepit fa_poi faepit(fa_poi p, int i); A paraméterként kapott bináris fába felveszi az integer paraméterként kapott értéket. Azonos érték esetén növeli a számlálót. fa gyökerére mutató pointer. NULL, ha üres felveendő érték kimenet: függvényérték: fa gyökerére mutató pointer Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -25- Alprogram spec. - folvas int folvas(file *fp, int *n); ( olvas 8. ea) Integer értékű függvény, beolvassa a következő egészet a paraméterként kapott állományból. A nem számjegy karaktereket eldobja. megnyitott állomány pointere pointer a kimenő adatra kimenet: olvasott egész (pointer paraméter) függvényérték 1, ha sikerült az olvasás, egyébként 0 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -26- Alprogram spec. - keres fa_poi keres(fa_poi p, int i); Függvény, amely a paraméterként kapott bináris fában megkeres egy elemet. fa gyökerére mutató pointer. NULL, ha üres keresett érték kimenet: függvényérték: megtalált elem pointere NULL, ha nincs. Alprogram spec. - fakir void fakir(fa_poi p); A paraméterként kapott fa elemeit nagyság szerint kiírja. fa gyökerére mutató pointer. NULL, ha üres kimenet: standard output Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -27- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -28- Algoritmus - faepit if a_fa_üres then új_elemet_veszünk_fel érték_azonos then növeljük_a_számlálót if kisebb_elemet_kell_felvenni then bal_részfát_építjük jobb_részfát_építjük Algoritmus - faepit Az építés algoritmusa rekurzív, ami nem meglepő, hiszen maga az adatszerkezet is rekurzív. A fa és annak minden részfája vagy üres, vagy egy gyökérelemből és annak bal és jobb oldali részfájából áll. Nem feltétlenül rekurzív, de sokkal egyszerűbb. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -29- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -30-

Implementáció - faepit A tömörebb írásmód miatt vezessük be a new makrót, ami megfelelő méretű helyet foglal, és hibát is kezel (visszatér NULL-lal): pointer változó tárolandó objektum típusa #define new(p, obj) \ if ((p = malloc(sizeof(obj))) == NULL) return(null) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -31- Implementáció - faepit fa_poi faepit(fa_poi p, int i) p csak itt változik if (p == NULL) new(p, fa_elem); p->bal = p->jobb = NULL; p->i = i; p->sz = 1; if (p->i == i) p->sz++; if (p->i > i) p->bal = faepit(p->bal, i); p->jobb = faepit(p->jobb, i); return(p); bal részfán tovább a változást visszaírjuk (!) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -32- Algoritmus - keres if a_fa_üres then nincs_meg_az_elem érték_azonos then megtaláltuk if a_keresett_elem_kisebb then bal_részfában_keresünk jobb_részfában_keresünk Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -33- Implementáció - keres fa_poi keres(fa_poi p, int i) if (p == NULL) return(null); if (p->i == i) return(p); if (p->i > i) return(keres(p->bal, i)); return(keres(p->jobb, i)); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -34- Algoritmus - fakir Implementáció - fakir if fa_nem_üres then begin kiírjuk_a_bal_részfát kiírjuk_az_elemet kiírjuk_a_jobb_részfát end 3 2 5 15 6 20 31 22 91 void fakir(fa_poi p) if (p!= NULL) fakir(p->bal); /* bal részfa */ printf( %5d%6d\n, p->i, p->sz); fakir(p->jobb); /* jobb részfa */ Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -35- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -36-

Implementáció - olvas int olvas(file *fp, int *i) int r ; while ((r = fscanf(fp, %d, i)) == 0) fscanf(fp, %*c ); return(r!= EOF); Implementáció - program #include <stdio.h> #include <stdlib.h> typedef struct fa_str int i; /* értek */ int sz; /* számláló */ struct fa_str *bal; /* bal mutató */ struct fa_str *jobb; /* jobb mutató */ fa_elem, *fa_poi; alprogramok Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -37- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -38- Implementáció - program main () fa_poi gyoker = NULL, p; FILE *fp; int i; if ((fp = fopen( binfa.txt, r )) == NULL) printf( A binfa.txt nem olvasható\n ), exit(-1); while (olvas(fp, &i)) gyoker = faepit(gyoker, i); olvas(stdin, &i); p = keres(gyoker, i); if (p!= NULL) printf( %d:%10d\n, p->i, p->sz); printf( Sajnos nincs meg!\n ); fakir(gyoker); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -39- Feladat 2 Keressünk a fában nem rekurzív algoritmussal! (A legtöbb esetben a rekurzió ciklussá alakítható.) Rajzoljuk ki a fát! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -40- Algoritmus - keres Implementáció - keres2 if a_fa_üres then nincs_meg_az_elem érték_azonos then megtaláltuk if a_keresett_elem_kisebb then bal_részfában_keresünk jobb_részfában_keresünk fa_poi keres2(fa_poi p, int i) while (p!= NULL) if (p->i == i) break; if (p->i > i) p = p->bal; p = p->jobb; return(p); ciklus elhagyása, mert megtaláltuk megtaláltuk, vagy NULL Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -41- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -42-

Alprogram spec. - farajz void farajz(fa_poi p, int m); A paraméterként kapott bináris fát kirajzolja a paraméterként kapott margóval. fa gyökerére mutató pointer. NULL, ha üres margó kimenet: 90 fokkal elforgatott rajz a fa elemeiről. Algoritmus - farajz if fa_nem_üres then begin növeljük_a_margót kiírjuk_a_jobb_részfát kiírjuk_a_margót kiírjuk_az_elemet kiírjuk_a_bal_részfát csökkentjük_a_margót end Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -43- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -44- Implementáció - farajz Próbafuttatás eredménye void farajz(fa_poi p, int m) if (p!= NULL) m++; növeljük a szintet (m-1)*5 szóköz farajz(p->jobb, m); /* jobb részfa */ printf( %*s%5d\n, (m-1)*5,, gy->i); farajz(p->bal, m); /* bal részfa */ m--; csökkentjük a szintet Input: (file) 20 30 25 10 7 8 5 4 31 20 30 9 7 7 7 7 Input: (standard) 7 7: 5 4 1 5 1 7 5 8 1 9 1 10 1 20 2 25 1 30 2 31 1 31 30 25 20 10 7 8 5 9 4 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -45- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -46- Összefoglalás A keresés gyorsítása érdekében a láncolt adatszerkezetet fába rendeztük. Fa: az adatszerkezet az egyes elemeknél elágazhat. Kétfelé ágazó fákat bináris fának nevezzük. A bináris fa és annak minden részfája vagy üres, vagy a gyökérelemből és annak bal és jobboldali részfájából áll. Összefoglalás (2) Ha egy elemnek nincs utódja, akkor azt levélelemnek nevezzük. Ha az összes levél azonos szinten van, akkor a fa kiegyensúlyozott. Rekurzív adatszerkezet. Rekurzív algoritmusokkal egyszerűbb kezelni. A keresés az elemek 2-es alapú logaritmusával arányos műveletet igényel. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -47- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -48-