Dinamikus adatszerkezetek, bináris keresés fák
faipari # 151; egy sor elemet, az úgynevezett csomópont (ebben az esetben az egyik közülük úgy definiáljuk, mint a gyökér), és a kapcsolatok (szülő-gyermek) csomópont, mely egy hierarchikus struktúrát. A csomópontok lehetnek értékei bármilyen egyszerű vagy strukturált típusú, kivéve a fájlt. Csomóponthoz, amely nincs a későbbi csomópont, az úgynevezett levelek.
Egy bináris (bináris) fa, minden csomópont lehet összekötve nem több, mint két más csomópontok. A rekurzív bináris fa definíciója a következő: a bináris fa vagy üres (nem tartalmaz egyetlen node), illetve tartalmaz egy csomópont az úgynevezett gyökér. valamint két független részfa - bal részfa és a jobb részfa.
Binary keresési fa lehet akár üres, akár azt, hogy az ingatlan a gyökér elem fontosabb helyszínen, mint bármely elemének a bal részfa, és kisebb vagy egyenlő, mint az elemek a jobb részfa. Az említett tulajdonságot nevezzük jellemző tulajdonsága egy bináris keresési fa és tartja bármely csomópont a fa, beleértve a gyökér. A következőkben úgy csak bináris keresés fák. Ezt a nevet a bináris keresés fákból az oka, hogy a keresési sebesség számukra körülbelül ugyanaz, mint a rendezett tömbben: O (n) = C • log2n (a legrosszabb esetben O (n) = n).
Példa. Egy sor adat 9, 44, 0, -7, 10, 6, -12, 45 építeni egy bináris keresési fa.
A definíció szerint a 9-es számú keresési bináris fát tesz a gyökere minden érték kevesebb, mint a - bal oldali részfa, nagyobb vagy egyenlő - a jobb oldalon. Minden részfa következő eleme lehet tekinteni, mint a gyökér, és járjon el ugyanazt az algoritmust. Ennek eredményeképpen megkapjuk
Kiválasztjuk jellemző műveletek bináris keresés fák:
- hozzáadunk egy elemet a fa;
- eltávolításával egy elemet a fa;
- fa bejárás (nyomtatott elemek, stb);
- Keresés a fán.
Mivel a definíció egy bináris fa rekurzív, ezek szokásos műveleteket lehet végrehajtani rekurzív szubrutin (a gyakorlatban ez a változat a leggyakrabban használt). Csupán annyit jegyzünk meg, hogy a használata rekurzió lassítja a programot, és fogyaszt felesleges memóriájában, amikor végre.
Hagyja bináris kereső fába írja le, hogy milyen típusú
Megmutatjuk két változat egy elemet a fa: iteratív és rekurzív.
Hasonlóképpen, a C ++.
Számos módja van, hogy megkerülje (tompított) minden facsomópontok. Három a leggyakrabban használt ezek az úgynevezett kijátszására él (prefix) sorrendben. megkerülve a fordított (postfix) az a mód, és megkerüli a belső rend (vagy kiegyensúlyozott séta). Minden kerülőutak felhasználásával valósították meg a rekurziót.
Az alábbiakban a szubrutin nyomtatási elemeket a fa felhasználásával bejárás bináris keresési fa fordított sorrendben.
Végre egy függvény, amely visszaadja igaz (1), ha egy elem van jelen a fa, és hamis (0) - egyébként.
Összehasonlítva az előző feladat törléséhez csomópont végre egy kicsit bonyolultabb a fáról. Mi lehet különbséget tenni a két esetben távolítsa el egy elem x (ha nincs elem a fa degenerált)
1) összeállítás, amely egy elem x. Van egy foka legfeljebb 1 (fokszámra - száma részfák áradó hogy node);
2) szerelvény, amely egy elem x. 2 tart.
Az 1. esetben egyszerű. Előző csomópont csatlakoztatva, vagy eltávolítjuk egyetlen részfáját a csomópont (ha a csomópont eltávolítjuk fokozatot 1), vagy nem lenne részfáját teljesen (ha a csomópont 0 fok).
Sokkal nehezebb, ha az eltávolított csomópont két részfa. Ebben az esetben ki kell cserélni a cserélhető elem a jobb oldali elem bal részfa.
Megjegyzés. Ha egy elem ismétlődik a fa többször eltávolítása csak az első előfordulása is.
Eljárásokat dolgozzanak ki a teremtés egy bináris keresési fa, amely n elemekkel.
Ellenőrző kérdések és feladatok- Mi egy rekurzív algoritmust?
- Mik az alkatrészek épített meghatározása egy rekurzív algoritmust?
- Mi elengedhetetlen a minden rekurzív algoritmus?
- Kicserélhetem rekurzió iteráció? Lehetséges, hogy cserélje iteráció rekurzió?
- Mi azt az elvet a dinamikus struktúra a „fa”?
- Sorolja fel a hasonlóságokat és különbségeket a dinamikus struktúrák, mint a „lineáris lista”, „stack”, „fa”.
- Sorolja fel a struktúrákat is képviselteti magát egy fa, amely előfordul a mindennapi életben.
- Fejezd be a mondatot: „Linear lista - egy fa ...”.
- Végre iteratív változata a fa-feldolgozó algoritmusok, amelyeket bemutatnak egy rekurzív formában.
- Írj egy rekurzív eljárás, amely kiírja az elemeket a levelek a fa.
- Írj egy rekurzív függvényt, amely meghatározza a mélység a megadott elemet a fa, és visszatér -1, ha nincs ilyen elem.
- Írja meg a rutin, hogy kiírja (egyszer) a fa tetején.
- Írj egy eljárást, hogy adott n megszámlálja az összes csomópont mélység n a megadott fa.
- Írjon egy eljárást, amely meghatározza az a fa mélysége.
Honlap létre uCoz rendszerben