Bináris fák
Bináris fák ábrázolása láncoltan
A bináris fa láncolt ábrázolása történhet két
pointerrel, egyik pointer a bal oldali gyerekre, a másik pointer a jobb
oldali gyerekre mutat. Ekkor egy irányított gráfként ábrázoljuk a fát. |
|
|
A bináris fa láncolt ábrázolása történhet három
pointerrel, egyik pointer a bal oldali gyerekre, a másik pointer a jobb
oldali gyerekre mutat, a harmadik pedig a szülőre. Ekkor egy
irányítatlan gráfként ábrázoljuk a fát. |
|
|
Az algoritmusokban használt jelölések
Ha láncoltan ábrázoljuk a bináris fát, akkor bejáráshoz pointereket használhatunk. Ha
p a fa egy
csúcsára mutató pointer, akkor:
Ábrázolás szintjén
megadott művelet |
Adatszerkezet szintjén
megadott művelet |
Jelentése |
p → bal |
bal(p) |
p bal oldali részfája |
p → jobb |
jobb(p) |
p jobb oldali részfája |
p → szülő |
szülő(p) |
p szülője |
p → kulcs |
kulcs(p)
vagy kulcs(gy(p)) |
p csúcsban tárolt kulcs, kulcs(p) helyett
használatos a kulcs(gy(p)) jelölés is,
hisz ilyenkor "p" egy fát szimbolizál, gy(p)
ennek a részfának a gyökerét jelenti |
p = NIL,NULL,0 |
p = Ω |
a részfa "üres" |
Nevezetes fabejáró algoritmusok
A bináris fákkal kapcsolatos feladatok megoldásai a három nevezetes rekurzív bejáró algoritmuson,
és az iteratív szintfolytonos bejáró algoritmuson alapulnak
Kifejezés fa
Feltéve, hogy egy aritmetikai kifejezésben két-, esetleg egy-operandusú műveleti jelek (operátorok)
fordulhatnak elő, a kifejezés ábrázolható egy bináris fával, ezt hívjuk kifejezés fának.
A kifejezés fa összefügg a tanult lengyel formával, ugyanis megfigyelhető, hogy a kifejezés fa
postorder bejárásával előállítható a lengyel forma, és fordítva is igaz, a lengyel formából
felépíthető a kifejezés fa.
Gyakorló feladatok
I. Fa felépítésével, bejárásval kapcsolatos gyakorló feladatok
- Az ábrán látható bináris fát egy 8 x 3 -as tömbben ábrázoltunk. A középső
oszlop tartalmazza a csúcsban tárolt kulcsot, az első oszlop a bal oldali gyerek
indexe, a harmadik oszlop a jobb oldali gyerek indexe. Az index helyére nulla
kerül, ha nincs az adott irányban leszármazottja a csúcsnak. Töltse ki a tömb
hiányzó értékeit. (Kezdő feladat.)
megoldás
- Az ábrán látható bináris fát egy 10 x 3 -as tömbben ábrázoltunk. A középső
oszlop tartalmazza a csúcsban tárolt kulcsot, az első oszlop a bal oldali gyerek
indexe, a harmadik oszlop a jobb oldali gyerek indexe. Az index helyére nulla
kerül, ha nincs az adott irányban leszármazottja a csúcsnak. Töltse ki a tömb
hiányzó értékeit. (Haladó feladat.)
megoldás
- Az ábrán látható nem bináris fát egy 10 x 3 -as tömbben két pointer segítségével ábrázoltunk.
A középső oszlop tartalmazza a csúcsban tárolt kulcsot, az első oszlop a csúcs "első" gyerekének
indexe, a harmadik oszlop a csúcs "testvérének" indexe. Az index helyére nulla
kerül, ha nincs gyereke illetve nincs testvére a csúcsnak. Töltse ki a tömb
hiányzó értékeit. (Nehéz feladat.)
megoldás
- Milyen sorrendben írná ki a három nevezetes rekurzív bejáró algoritmus az alábbi fa
csúcsainak azonosítóját?
megoldás
- Egy (nem teljes) bináris fa postorder és inorder bejárása a következő
sorozatokat eredményezte, rajzolja le a fát!
POSTODER: 17, 4, 7, 9, 45, 91, 2, 8, 53, 10, 66, 72, 34, 5, 3
INORDER: 17, 8, 4, 7, 91, 45, 9, 2, 3, 5, 34, 53, 66, 10, 72
megoldás lépésről lépésre, részletesen
- Milyen sorrendben írná ki a három nevezetes rekurzív bejáró algoritmus az alábbi fa
csúcsainak azonosítóját?
- Egy (nem teljes) bináris fa preorder és inorder bejárása a következő
sorozatokat eredményezte, rajzolja le a fát!
PREORDER: D E M L A
H P B K G N
Q C F
INORDER: L M H A E D B G K N P C F Q
megoldás
II. Rekurzív algoritmus készítésére gyakorló feladatok
- Készítsünk rekurzív függvényt, amelyik megszámolja egy bináris fában a
a) csúcsokat
b) leveleket.
- Készítsünk rekurzív függvényt, mely megadja egy bináris fa adott
szintjén lévő a) csúcsok b) levelek számát.
- Adott két bináris fa. Készítsünk logikai értékű rekurzív
függvényt, mely eldönti, hogy azonos-e a szerkezetük.
- Készítsünk rekurzív függvényt, mely megadja egy bináris fa csúcsaiban
(belső pontjaiban, leveleiben) szereplő értékek maximumát.
- Készítsünk rekurzív függvényt, mely meghatározza azt a legkisebb
magasságot, amelyben egy megadott bináris fa már tartalmaz levelet.
(Üres fára ez az érték legyen -1, egy pontból álló fára pedig nulla.)
- Készítsünk rekurzív függvényt, mely eldönti egy bináris fáról,
hogy piramis-e. (Minden belső csúcsban kisebb vagy egyenlő érték található,
mint a gyerekeiben.)
- Adott egy kifejezésfa. Készítsünk rekurzív elárást, mely kiírja
a kifejezés teljesen zárójelezett alakját. (Az operandusok nincsenek zárójelben.)
III. Iteratív algoritmus készítésére gyakorló feladatok
- Adott egy kifejezés lengyel formája egy szekvenciális input sorozatban.
Készítsünk iteratív eljárást, mely felépíti a kifejezésfát.
- Készítsük el a preorder rekurzív bejáró algoritmus iteratív változatát.
- Készítsük el az inorder rekurzív bejáró algoritmus iteratív
változatát.
- Készítsük el a postorder rekurzív bejáró algoritmus iteratív változatát.