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

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

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

Információs Technológia

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 C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

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++

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)

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

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

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.

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

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

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..

Programozás II. Fájlkezelés

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

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

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

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

Algoritmusok és adatszerkezetek gyakorlat 07

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

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

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

Adatszerkezetek és algoritmusok

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

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

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

INFORMATIKA tétel 2019

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.

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

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

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

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

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

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

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

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

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:

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

Elemi adatszerkezetek

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

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

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

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

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

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

Algoritmusok pszeudókód... 1

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

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

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

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

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

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

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

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

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

III. Adatszerkezetek és algoritmusok

Alprogramok, paraméterátadás

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

Programozás I. gyakorlat

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

Adatszerkezetek 7a. Dr. IványiPéter

7. gyakorlat Sorozatok, Fájlkezelés

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

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

Programozás I gyakorlat

Információs Technológia

Rekurzív algoritmusok

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

Vezérlési szerkezetek

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Ö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.

Algoritmusok pszeudókód... 1

INFORMATIKA tétel 2018

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

Kupac adatszerkezet. 1. ábra.

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

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.

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

Tartalomjegyzék Algoritmusok - pszeudókód

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

1. Alapok. Programozás II

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.

Programozás C és C++ -ban

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Átírás:

Programozás alapjai C nyelv 9. gyakorlat Szeberényi Imre BME IIT <szebi@iit.bme.hu> Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -1- 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. -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. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -3-

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. -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) harki(34) m 1 harki(11) m 2 harki(3) m 0 void harki(int n) int e, m = n % 3; if (e = n / 3) harki(e); printf( %d, m); harki(1) m 1 1 2 0 1 34 10 =1021 3 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -9-

Példa: Hanoi tornyai legenda Feladat:? Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -10- Algoritmus a legenda szerint Á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- Hanoi tornyai folyt. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -12-

Hanoi tornyai folyt. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -13- Hanoi tornyai folyt. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -14- Hanoi tornyai folyt. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -15-

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. -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 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -17- Fa i 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. -18-

Fa 15 6 20 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -19- Fa 22 91 620 35231 812 15 6 20 3 8 31 2 5 12 22 91 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -20- Fa (elfajuló) 91 5 12 20 22 31 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -21-

Feladat 1 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. -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; Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -23- 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 else nem_találtuk_meg fakir(gyoker) 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. bemenet: 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. bemenet: 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. bemenet: 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. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -27-

Alprogram spec. - fakir void fakir(fa_poi p); A paraméterként kapott fa elemeit nagyság szerint kiírja. bemenet: 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. -28- Algoritmus - faepit if a_fa_üres then új_elemet_veszünk_fel else érték_azonos then növeljük_a_számlálót else if kisebb_elemet_kell_felvenni then bal_részfát_építjük else jobb_részfát_építjük Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -29- 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. -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; else if (p->i == i) p->sz++; else if (p->i > i) p->bal = faepit(p->bal, i); else 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 else érték_azonos then megtaláltuk else if a_keresett_elem_kisebb then bal_részfában_keresünk else 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); else if (p->i == i) return(p); else if (p->i > i) return(keres(p->bal, i)); else return(keres(p->jobb, i)); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -34- Algoritmus - 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 15 6 20 31 2 5 22 91 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -35- Implementáció - fakir 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. -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); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -37- 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. -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); else 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 if a_fa_üres then nincs_meg_az_elem else érték_azonos then megtaláltuk else if a_keresett_elem_kisebb then bal_részfában_keresünk else jobb_részfában_keresünk Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -41- Implementáció - keres2 fa_poi keres2(fa_poi p, int i) while (p!= NULL) if (p->i == i) break; if (p->i > i) p = p->bal; else 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. -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. bemenet: fa gyökerére mutató pointer. NULL, ha üres margó kimenet: 90 fokkal elforgatott rajz a fa elemeiről. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -43- 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. -44- Implementáció - farajz 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 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -45-

Próbafuttatás eredménye 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. -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. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -47- Ö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. -48-