I. Elemi algoritmusok



Hasonló dokumentumok
Elemi adatszerkezetek

Érettségi feladatok Algoritmusok egydimenziós tömbökkel (vektorokkal) 1/6. Alapműveletek

Párhuzamos programozás

Rendezési algoritmusok belső rendezés külső rendezés

Programozási tételek

A Hozzárendelési feladat megoldása Magyar-módszerrel

Algoritmuselmélet. Keresés, rendezés, buborék, beszúrásos, összefésüléses, kupacos, láda, radix. Katona Gyula Y.

Kombinatorika. 9. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Kombinatorika p. 1/

Gyakorló feladatok ZH-ra

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉPSZINT Függvények

ADATBÁZIS-KEZELÉS. Funkcionális függés, normál formák

2011. március 9. Dr. Vincze Szilvia

Egyszerű programozási tételek

KOVÁCS BÉLA, MATEMATIKA I.

Jelek tanulmányozása

- Levelek: operandusok - Csomópontok: operátorok. Fenti kifejezés: (x+ (y 10)) * (6 / z) Bináris Keresőfa (BST) Példa bináris keresőfára.

Fordítóprogramok Készítette: Nagy Krisztián

ELŐTERJESZTÉS a Veszprém Megyei Önkormányzat Közgyűlésének április 19-ei ülésére

Analízis elo adások. Vajda István október 3. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

MBLK12: Relációk és műveletek (levelező) (előadásvázlat) Maróti Miklós, Kátai-Urbán Kamilla

Árverés kezelés ECP WEBSHOP BEÉPÜLŐ MODUL ÁRVERÉS KEZELŐ KIEGÉSZÍTÉS. v ECP WEBSHOP V1.8 WEBÁRUHÁZ MODULHOZ

Mágneses szuszceptibilitás vizsgálata

Azonosító jel: Matematika emelt szint

Analízis elo adások. Vajda István szeptember 24. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

V. Kétszemélyes játékok

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Trigonometria

RENDEZÉSEK, TOVÁBBI PROGRAMOZÁSI TÉTELEK

V. Játékok. Kétszemélyes, teljes információjú, véges és determinisztikus, zéró összegű, játékok. Állapottér-reprezentáció. Grundy mama játéka

Beszámoló: a kompetenciamérés eredményének javítását célzó intézkedési tervben foglaltak megvalósításáról. Őcsény, november 20.

KOVÁCS BÉLA, MATEMATIKA I.

Korszerű geodéziai adatfeldolgozás Kulcsár Attila

Adatszerkezetek. Listák

Lineáris algebra gyakorlat

1. forduló. MEGOLDÁSOK Pontszerző Matematikaverseny 2015/2016-os tanév

Gépi forgácsoló Gépi forgácsoló

Üresként jelölt CRF visszaállítása

Minta programterv a 1. házi feladathoz

Shared IMAP beállítása magyar nyelvű webmailes felületen

Dr. Schuster György február 21. Real-time operációs rendszerek RTOS

REKURZIÓ. Rekurzív: önmagát ismétlő valami (tevékenység, adatszerkezet stb.) Rekurzív függvény: függvény, amely meghívja saját magát.

Az első lépések. A Start menüből válasszuk ki a Minden program parancsot. A megjelenő listában kattintsunk rá az indítandó program nevére.

[MECHANIKA- HAJLÍTÁS]

GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN

A döntő feladatai. valós számok!

Algebra es sz amelm elet 3 el oad as Rel aci ok Waldhauser Tam as 2014 oszi f el ev

MEZŐGAZDASÁGI ALAPISMERETEK ÉRETTSÉGI VIZSGA II. A VIZSGA LEÍRÁSA

INFORMATIKAI ALAPISMERETEK

Operációkutatás. 2. konzultáció: Lineáris programozás (2. rész) Feladattípusok

ELLENÁLLÁSOK PÁRHUZAMOS KAPCSOLÁSA, KIRCHHOFF I. TÖRVÉNYE, A CSOMÓPONTI TÖRVÉNY ELLENÁLLÁSOK PÁRHUZAMOS KAPCSOLÁSA. 1. ábra

Programozás I gyakorlat

Neptun rendszer jelentkezési segéd

Készítsen négy oldalas prezentációt egy vállalat bemutatására!

Informatikai tehetséggondozás:

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

BOLYAI MATEMATIKA CSAPATVERSENY ORSZÁGOS DÖNTŐ SZÓBELI (2012. NOVEMBER 24.) 3. osztály

Kérjük, hogy mielőtt elkezdené használni a Csavarhat webáruházat, gondosan olvassa végig ezt a segédletet.

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

DLookup függvény 1. (5)

Fókuszban a formahibák. Konzultációs nap Minőségfejlesztési Iroda szeptember 18. Fekete Krisztina

PROGRAMOZÁSI TÉTELEK

MATLAB. 4. gyakorlat. Lineáris egyenletrendszerek, leképezések

BOLYAI MATEMATIKA CSAPATVERSENY FŐVÁROSI DÖNTŐ SZÓBELI (2005. NOVEMBER 26.) 5. osztály

SÜTIK TÖRLÉSE. Készült: Módosítva:

Koordináta - geometria I.

Vektoros elemzés végrehajtása QGIS GRASS moduljával 1.7 dr. Siki Zoltán

Vegyes tételek könyvelése felhasználói dokumentum Lezárva:

BOLYAI MATEMATIKA CSAPATVERSENY DÖNTŐ osztály

Áramlástechnikai gépek soros és párhuzamos üzeme, grafikus és numerikus megoldási módszerek (13. fejezet)

IV.5. GARÁZS 1. A feladatsor jellemzői

Az aktiválódásoknak azonban itt még nincs vége, ugyanis az aktiválódások 30 évenként ismétlődnek!

A SZÁMFOGALOM KIALAKÍTÁSA

MÁTRIXOK SAJÁTÉRTÉKEINEK ÉS SAJÁTVEKTORAINAK KISZÁMÍTÁSA. 1. Definíció alkalmazásával megoldható feladatok

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

1. Metrótörténet. A feladat folytatása a következő oldalon található. Informatika emelt szint. m2_blaha.jpg, m3_nagyvaradter.jpg és m4_furopajzs.jpg.

Szakdolgozat. Miskolci Egyetem. Rendezési algoritmusok szemléltetése. Készítette: Fekete Enikő Programtervező informatikus szak

ÚTMUTATÓ A KONTROLL ADATSZOLGÁLTATÁS ELKÉSZÍTÉSÉHEZ (2012-TŐL)

Körkörös listák. fej. utolsó. utolsó. fej

FORTE MAP 5.0 Felhasználói tájékoztató

E-számla igénylése három lépéssel!

Házi dolgozat. Minta a házi dolgozat formai és tartalmi követelményeihez. Készítette: (név+osztály) Iskola: (az iskola teljes neve)

1. Írja fel prímszámok szorzataként a 420-at! 2. Bontsa fel a et két részre úgy, hogy a részek aránya 5 : 4 legyen!

Bevezetés a programozásba. 12. Előadás: 8 királynő

Szeminárium-Rekurziók

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

Egyre nagyobb profitot generálnak a mobiltelefonnal végzett vásárlások, és egyre többet hezitálunk vásárlás előtt

Számítógépes vírusok

EPER E-KATA integráció

[GVMGS11MNC] Gazdaságstatisztika

Kereséssel történő problémamegoldás. Ormándi Róbert

MATEMATIKA ÍRÁSBELI VIZSGA május 3.

Amit a Hőátbocsátási tényezőről tudni kell

SOLARCAPITAL MARKETS ZRT. Összefoglaló

A 10/2007 (II. 27.) 1/2006 (II. 17.) OM

Kooperáció és intelligencia

Prop-Tech. Vázmérő. Telepítési és eltávolítási útmutató

Fábián Zoltán Hálózatok elmélet

Felvételi 2013 Felvételi tájékoztató 2013

Országos Középiskolai Tanulmányi Verseny 2011/2012 Matematika I. kategória (SZAKKÖZÉPISKOLA) Döntő. x 3x 2 <

Adatgyőjtés, mérési alapok, a környezetgazdálkodás fontosabb mőszerei

Átírás:

I. Elemi algoritmusok A számítógépes feladatmegoldás során az algoritmus megtervezésekor bizonyos elemi tevékenységek gyakran felmerülnek megoldandó feladatként. Az ezeket megoldó algoritmusokat mutatjuk meg a következőkben. Az algoritmusokat mondatszerű leírással adjuk meg. Elsőként olyan algoritmusokkal foglalkozunk, amelyek egy sorozatból egy adatot állítanak elő. Elemek összegzése Adott egy N elemű e számsorozat. Határozzuk meg az elemek összegét! A végeredményt az s tartalmazza. ÖSSZEGZÉS s := 0 CIKLUS i := 1-TŐL N-IG s := s + e[i] Adott tulajdonság keresése Adott egy N elemű e sorozat, és az elemein értelmezett T tulajdonság. Döntsük el, hogy van-e legalább egy olyan elem a sorozatban, amely rendelkezik a T tulajdonsággal! ELDÖNTÉS talált:=0 i := 1 CIKLUS AMÍG i<=n ÉS e[i] NEM tulajdonságú i := i+1 HA i <= N AKKOR talált:=1 Kiválasztás Adott egy N elemű e sorozat. Tudjuk, hogy a sorozat valamely eleme rendelkezik a T tulajdonsággal. Határozzuk meg az első ilyen elem sorszámát! KIVÁLASZTÁS i := 1 CIKLUS AMÍG e[i] NEM tulajdonságú i := i+1 sorszám := i

Maximum kiválasztása Az előbbi feladat egy speciális eseteként, egy adott sorozat legnagyobb (vagy esetleg legkisebb) elemének megkeresése is gyakran előfordul. Adott e sorozatból keressük ki a legnagyobb elemet! MAXIMUM sorszám := 1 CIKLUS i := 2-TŐL N-IG HA e[sorszám] < e[i] AKKOR sorszám := i Megszámlálás A tulajdonság előfordulása mellett az is kérdés lehet, hogy hány elem rendelkezik ezzel az adott tulajdonsággal. Legyen adott egy N elemű e sorozat és egy T tulajdonság. Határozzuk meg a T tulajdonsággal rendelkező elemek számát! MEGSZÁMLÁLÁS darab := 0 CIKLUS i := 1-TŐL N-IG Ha e[i] T tulajdonságú AKKOR darab := darab+1

II. Keresések Az előző feladatok összefoglalását adja a keresés. Nem rendelkezünk azzal az ismerettel, hogy egy adott tulajdonságú elem benne van-e a sorozatban. Ha igen, akkor meg akarjuk tudni a sorszámát is. A keresésre két módszer is használatos. A lineáris keresést akkor alkalmazzuk, ha a sorozat elemei nem rendezettek a tulajdonságnak megfelelően, míg a bináris vagy logaritmikus keresést akkor, ha a rendezettség fennáll. Lineáris keresés Adott egy N elemű e sorozat, és egy T tulajdonság. Döntsük el, hogy van-e olyan eleme a sorozatnak, amely rendelkezik a T tulajdonsággal, és ha van, akkor hányadik! (Ha nincs ilyen tulajdonságú elem, akkor a sorszám értéke legyen 0.) LINEÁRIS_ KERESÉS sorszám := 0 i :=1 CIKLUS AMÍG i <= N ÉS e[i] NEM T tulajdonságú i := i+1 HA i <= N AKKOR sorszám := i Strázsás keresés Adott N elemű e sorozatban keressük azt az elemet, amelynek értéke q. Ha a sorozat N+1-dik elemeként felvesszük a keresett elemet (q-t), akkor nem kell figyelni, hogy a sorozat végére értünk-e. Az N+1-dik elem "őrködik", és biztosítja, hogy ne haladjunk túl a sorozaton. STRÁZSÁS_KERESÉS e(n+1) := q sorszám := 0 i := 1 CIKLUS AMÍG e[i] <> q i := i+1 HA i <= N AKKOR sorszám := i A strázsás keresés nagy elemszámú sorozatok esetén hatékonyabb az egyszerű lineáris keresésnél, mert a ciklusfeltétel kiértékelése lényegesen rövidebb.

Logaritmikus keresés A rendezett sorozatban való keresés algoritmusa az előbbitől lényegesen eltérő. Adott egy növekvő sorrendbe rendezett N elemű e sorozat. Keressük meg azt az i-t, amelyre e[i] = x (T tulajdonság)! Elsőként a teljes intervallum felezőpontjában lévő elemet nézzük meg, hogy egyenlő-e x-szel. Ha nem azonos x a felezőpontban talált elemmel, akkot két eset lehet. Ha nagyobb, akkor a felső részintervallumot felezzük a következő lépésben, ha kisebb, akkor pedig az alsót. Ezt folytatjuk, míg az intervallumok hossza 1 nem lesz. LOGARITMIKUS_KERESÉS sorszám := 0 alsó := 1 felső := N CIKLUS közép:=egészrész((alsó+felső) /2) HA e[közép]< x AKKOR alsó:= közép+1 HA e[közép]< x AKKOR felső:= közép -1 AMÍG alsó <= felső ÉS e[közép] <> x HA alsó <= felső AKKOR sorszám := közép A következő algoritmus egy sorozatból egy másik sorozatot állít elő: meghatározzuk egy sorozat összes T tulajdonságú elemét. Kiválogatás Egy sorozat elemei közül azokat válogatjuk ki egy új sorozatba, amelyek megfelelnek egy adott tulajdonságnak. Legyen adott egy N elemű e sorozat és a T tulajdonság. Gyűjtsük ki az a sorozatba a T tulajdonságú e-beli elemeket! KIVÁLOGATÁS j := 0 CIKLUS i-től N-IG HA e[i] T tulajdonságú AKKOR j := j+1 a[j] := e[i]

III. Rendezések Gyakran a rendezett elemekkel való műveletvégzés (pl. egy adott tulajdonság keresése) sokkal hatékonyabb, mint rendezetlen elemek esetében. Ezért nagyon fontosak a sorozat elemeit más sorrendbe előállító algoritmusok. Ezeket az algoritmusokat adott tulajdonság szerinti rendezésnek nevezzük. A többféle rendezési módszer közül a legismertebbek algoritmusát adjuk meg. Két elem cseréjét a következőkben az alábbi módon jelöljük: EGYIK MÁSIK. A csere megvalósítása például a következő módon történhet: EGYIK MÁSIK segéd := egyik egyik := másik másik := segéd Minimum-elven alapuló rendezés A minimumkereséses rendezés lényege az, hogy egy adott intervallumban - amely kezdetben a teljes sorozat - megkeressük a legkisebb elemet, s azt tesszük az első helyre. A következő lépésben eggyel szűkítjük az intervallumot (megnöveljük a sorozat alsó határát jelölő indexet), és ismét a legkisebb elemet visszük előre. Végül a rendezendő adatok elfogynak, a sorozat végére érünk. A mindenkori legkisebb elem keresése lineáris módszerrel történik. MINIMUM_ELV CIKLUS i:=1-től n-1-ig legkisebb := e[i]; sorszáma := i; CIKLUS j := i+1-től N-IG HA legkisebb > e[j] AKKOR legkisebb := e[j] sorszáma := j; e[sorszáma] e[i];

Buborék rendezés A buborék rendezés mindig két szomszédos elemet vizsgál, s ha azok a kívánt rendezettségnek nem felelnek meg, felcseréli őket, majd tovább lépve újabb elempárt vizsgál. Az elejétől a végéig ismételten végigpásztázva az egész sorozatot, eljutunk a rendezett állapotig, amikor már nincs szükség cserére. BUBORÉK_ELV CIKLUS i:=1-től N-1-IG CIKLUS j:= i-től N-1-IG HA e[j] > e[j+1] AKKOR e[j] e[j+1] Javított buborékos rendezés Ha a buborékos rendezésnél egy teljes belső ciklus lefutása alatt egyetlen csere sem volt, akkor a sorozat már rendezett. Ilyenkor feleslegesek a további összehasonlítások. JOBB_BUBORÉK csere := 1 CIKLUS AMÍG csere = 1 CSERE := 0 CIKLUS j := 1-TŐL N-1-IG HA e[j]>e[j+1] AKKOR e[j] e[j+1] CSERE :=1

Rendezés a módosított Buborék-elv alapján Alapelve megegyezik a buborék rendezéssel azzal a különbséggel, hogy a pásztázás nem egyirányú, hanem váltakozó, és a pásztázás intervallumát mindkét irányban folyamatosan csökkentjük. Az első pásztázás után a legnagyobb elem a sorozat végére, vagyis végleges helyére kerül, és az intervallum felső határát eggyel lecsökkentjük. A következő lépésben visszafelé végezzük el a pásztázást, így a legkisebb elem a sorozat elejére kerül, az alsó határt pedig eggyel megnöveljük. A rendezett állapotig elvezető pásztázás mindaddig tart, amíg a pásztázási intervallum le nem csökken két elemre. MÓDOSÍTOTT_BUBORÉK_ELV alsó := 2 felső := N segéd := N CIKLUS CIKLUS j:= felső-től alsó-ig -1-ESÉVEL HA e[j-1] > e[j] AKKOR e[j-1] e[j] segéd := j alsó := segéd+1 CIKLUS j:= alsó -TÓL felső -IG HA e[j-1]>e[j]akkor e[j-1] e[j] segéd := j felső := segéd -1 AMÍG alsó > felső

Beszúró rendezés A rendezés során sorrendbeli hibát keresünk. A már rendezett részsorozatba illesztjük a következő elemet, amíg a teljes sorozat rendezetté válik. BESZÚRÓ_ELV CIKLUS i := 2-TŐL N-IG segéd := e[i] j := i CIKLUS AMÍG j > 1 ÉS segéd < e[j-1] e[j] := e[j-1] j := j-1 e[j] := segéd Összefésülés Két rendezett sorozat egyesítése oly módon, hogy az egyesítés során keletkező sorozat is rendezett legyen. A két növekvő sorrendben rendezett sorozat legyen az M elemű a ill. az N elemű b sorozat. Az eredmény sorozat c, elemszáma legfeljebb M+N. Ha egy elem mindkét sorozatban szerepel, csak egyszer másoljuk át az új sorozatba. Az összefésülést strázsával valósítjuk meg. A strázsa az adott adattípus legnagyobb eleme lesz. ÖSSZEFÉSÜLÉS a[m+1] := strázsa b[n+1] := strázsa i :=1, j := 1, k := 0 CIKLUS AMÍG i < M+1 VAGY j < N+1 k := k+1 ELÁGAZÁS a[ i] < b[ j] ESETÉN c[ k] := a[ i], i := i+1 a[ i] = b[ j] ESETÉN c[ k] := a[ i], i := i+1, j := j+1 a[ i] > b[ j] ESETÉN c[ k] := b[ j], j := j+1

Rekurzív algoritmusok Rekurzív algoritmus az, amely közvetlenül vagy közvetve hívja önmagát. Rekurzív algoritmusok használata akkor lehet indokolt, ha a megoldandó probléma vagy a feldolgozásra váró adatok struktúrája eleve rekurzív. A rekurzív algoritmussal megoldott legismertebb problémák közül a Hanoi tornyait és a gyorsrendezést kell megemlítenünk. Sok olyan feladat is van, amelyet rekurzívan megoldani kényelmes, de nem érdemes. Ilyenek pl. a faktoriálisok és a Fibonacci-számok előállítása. Gyorsrendezés (quicksort) Azért kapta ezt a nevet, mert a tömbökre ismert rendezések közül a leghatékonyabb. Megalkotója C.A. R. Hoare (1960.). Az elv a következő: - osszuk két részre a rendezendő sorozatot úgy, hogy az egyik rész minden eleme kisebb legyen a másik rész minden eleménél! - a két részre külön-külön ismételjük meg az előző lépést, amíg mindkét rész 0 vagy 1 elemű lesz. A feldolgozási műveletet tehát egy szétválogatás, amelynek során egy megadott értékhez (pl. a sorozat középső eleméhez) viszonyítva a tőle kisebb elemeket elé, a nagyobbakat mögé helyezzük. A megvalósítás: az a[n] sorozat kiválasztott eleme legyen x. Balról indulva keressük meg az első a[i] > x elemet, majd jobbról kezdve az első olyat, amelyre a[j] < x. Cseréljük fel ezt a két tételt, majd folytassuk a keresés-felcserélés műveletet mindaddig, amíg a két irányú pásztázás nem találkozik valahol a tömb közepén. A cserében a kiválasztott elem is részt vesz. QUICKSORT (alsó, felső) i := alsó, j := felső x : =a[(alsó+ felső) /2] CIKLUS AMÍG i < j CIKLUS AMÍG a[i] < x i := i+1 CIKLUS AMÍG a[j] > x j := j-1 HA i < j AKKOR a[i] a[j] i := i+1, j := j-1 HA alsó < j AKKOR QUICKSORT (alsó, j) HA i < felső AKKOR QUICKSORT (i, felső)

Rekurzív adatszerkezetek Definiálhatók rekurzív módon (pl bináris fa), méretük nem állandó. Egy bináris fa vagy üres, vagy minden csomópontból 2 részfa ágazik el. A bináris fákat gyakran alkalmazzák adathalmaz ábrázolására, ahonnan az elemeket azonosító kulcsuk alapján kell előkeresni. Ha egy bináris fát oly módon építünk fel, hogy minden csomópontra a bal részfán szereplő kulcsok kisebbek, a jobb részfa kulcsai pedig nagyobbak, mint a csomópont kulcsa, akkor a fát keresőfának (search tree) nevezzük. Egy keresőfában tetszőleges kulcs érhető el a gyökértől induló keresőútvonalon úgy, hogy minden csomópontból a bal vagy jobb részfa felé haladunk, és a döntéshez csak a csomóponthoz tartozó kulcsot kell vizsgálnunk. (Gyorsabb a keresés, mint a rendezett listában!) A továbbiakban az ilyen keresőfákkal végezhető alapműveleteket (keresés, beszúrás, törlés, bejárások) adjuk meg. A bináris fa bejárásának azt a folyamatot nevezzük, amikor a fa minden elemét - pontosan egyszer érintve - feldolgozzuk. A gyakorlatban három, a rekurzív definícióra támaszkodó módszer terjedt el. Ezek: 1. Preorder (gyökérkezdő) bejárás: - a gyökérelem feldolgozása, - a baloldali részfa preorder bejárása, - a jobboldali részfa preorder bejárása. 2. Inorder (gyökérközepű) bejárás: - a baloldali részfa inorder bejárása, - a gyökérelem feldolgozása, - a jobboldali részfa inorder bejárása. 3. Postorder (gyökérvégű) bejárás: - a baloldali részfa postorder bejárása, - a jobboldali részfa postorder bejárása, - a gyökérelem feldolgozása. Ezek a műveletek rendkívül egyszerűek, ezért csak egyiknek adjuk meg a megoldását. Látható, hogy az inorder bejárás a kulcsok növekvő sorrendje szerinti lesz! A fa csomópont elemei struktúrák: typedef struct csomopont* pcsomo; struct csomopont { pcsomo bal; int kulcs; pcsomo jobb; }; void preorder(pcsomo csomo) { if (csomo!= NULL) { write(csomo->kulcs); preorder(csomo->bal); preorder(csomo->jobb); } }

A beszúrást és a törlést meg kell előznie az adott kulcsú elem keresésének. Első esetben a beszúrás helyét, a másodikban pedig a törlendő elemet keressük. A keresést mindig a gyökértől kiindulva végezzük. Beszúrásnál az új elemet (x) levélként illesztjük a fára. KERES_BESZUR (x,p) p: az aktuális csomópontra mutat. HA p = NULL AKKOR {x nincs a fán, beiktatás} KÜLÖNBEN ELÁGAZÁS x < p kulcs ESETÉN KERES_BESZUR (x, p bal) x > p kulcs ESETÉN KERES_BESZUR (x, p jobb) x = p kulcs ESETÉN {Már van ilyen elem a fán!} A törlés általában bonyolultabb feladat, mint a beszúrás. Ha a törlendő kulcsú elem levél vagy olyan csomópont, amelynek csak egy utóda van, akkor egyszerű a megoldás. De ha két utódja van, akkor nehezebb a probléma, hiszen egy pointerrel nem tudunk két irányba mutatni. Ilyenkor a kiiktatott csúcsot vagy a bal részfájának legjobboldalibb elemével (a nála kisebb elemek legnagyobbikával) kell helyettesítenünk, vagy a jobb részfájának legbaloldalibb elemével (a nála nagyobb elemek legkisebbikével) kell helyettesítenünk. Mindegyiküknek legfeljebb egy utódja van! A törlés feladatát két rekurzív eljárással oldjuk meg. A TOROL eljárás keresi a törlendő faelemet (kulcsa: x) és három esetet különböztet meg: 1. Nincs olyan elem a fán, amelynek kulcsa = x. 2. Az x kulcsú komponensnek legfeljebb 1 utódja van. 3. Az x kulcsú komponensnek 2 utódja van. A 3. esetben a TOROL eljárás meghívja a másik eljárást, a POTOL-t. Ennek az a dolga, hogy az x kulcsú csomópont baloldali részfájának szélső jobboldali elemét megkeresi, és áthelyezi a törlendő csomópontba. A POTOL visszaadja q-ban az áthelyezett elem pointerét. A felszabadítást a TOROL végzi.

TOROL (x, p) p: az aktuális csomópontra mutat. HA p = NULL AKKOR {Nincs a fán x kulcsú elem!} KÜLÖNBEN ELÁGAZÁS HA x < p kulcs AKKOR TOROL (x, p bal) HA x > p kulcs AKKOR TOROL (x, p jobb) HA x = p kulcs AKKOR q := p ELÁGAZÁS HA q jobb = NULL AKKOR p:= q bal HA q bal = NULL AKKOR p:= q jobb HA q jobb NULL ÉS q bal NULL AKKOR POTOL (q bal) {q felszabadítása} POTOL (p) HA r jobb NULL AKKOR POTOL (r jobb) KÜLÖNBEN { q-ba átmozgatjuk r-t } q := r, r := r bal