Kezdőoldal » Számítástechnika » Programozás » Bináris fa keresés?

Bináris fa keresés?

Figyelt kérdés

gondolom tudjátok mi az a bináris fa

nos,ugye a keresés az úgy van, h pl. egy tömbben tároljuk az adatokat. és mindig nézzük, h mikor egyenlő mikor nagyobb kisebb az adott számnál az amit keresünk...

Nos, próbáltam írni egy ilyen programot.

Azonban nem tudom miért de ha 25-t adok meg ( mely a fa első eleme) akkor megy, de ha már elágazik a fa akkor kilép a programból.. miért??

kódom:

#include<stdio.h>

int b = 0; // ezt itt 0 nak adom meg, ezt fogja majd a kereso függvény először használni

int kereso(int szam, int b) // itt van 2 változó, melyek kellenek a függvény hívásához

{

int tomb[] = {25, 20, 30, 15, 22, 28, 32}; // ebben a tömben vannak a kereshető számok

if(szam == tomb[b]) // ha a számunk pont a tömb b. eleme

{

return b+1; // akkor a függvény visszatér b+1- el, b+1 mert a tömb sorszámozása le van maradva

}

else { // ha nem egyenlő

if(szam < tomb[b]) // ha kisebb

{

kereso(szam, b = 2 * b + 1); //akkor ezzel e képlettel indul el megint a függvény a ,b' érték helyett

}

else {

kereso(szam,b = 2 * b + 2); // ha nagyobb akkor ezzel

}

}

}


int main()

{

int a;

scanf("%d",&a); // bekérjük a keresendőt

printf("%d\n",kereso(a, b)); //kiíratjuk a függvényt, a két adott értékkel..

}



2013. márc. 20. 20:29
 1/6 anonim ***** válasza:

Nos először is a bináris fa nem "úgy van, hogy tömbben tároljuk az elemeket", hanem a bináris fa egy lehetséges reprezentációja tömbös. A fent leírt keresési algoritmusod ráadásul bináris keresőfára igaz, nem pedig minden bináris fára. Szerencsére a feltüntetett bináris fád egy ilyen bináris keresőfa tömbös reprezentációja sorfolytonosan, ezért a rekurzív megoldás nagyban hasonlít a tiedhez. Mindazonáltal teljesen felesleges a tömböt minden rekurzív lépésben létrehoznod, illetve nem ellenőrzöd a fa vége feltételt, azaz ha a keresett elemed nincs a fában a programod elszáll. Valami ilyesmi:

int b = 0;

int tomb[] = {25, 20, 30, 15, 22, 28, 32};

int kereso(int szam, int b){

if(szam == tomb[b]){

return b+1;

}else if(szam < tomb[b]){

return tomb[2*b+1]!=NULL ? kereso(szam, b = 2 * b + 1) : -1;

}else{

return tomb[2*b+2]!=NULL ? kereso(szam,b = 2 * b + 2) : -1;

}

}

2013. márc. 21. 00:24
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
arra, h kihelyezem a tömböt már én is rájöttem utólag, de így se megy... mi lehet??
2013. márc. 21. 05:48
 3/6 A kérdező kommentje:

egyébként köszi szépen! :)

írtad, h elszáll a programom, ha nem található meg az adott elem... de ha pont olyan számot adok meg ami benne van pl.: 20 akkor is elszáll. miért lehet ez?

2013. márc. 21. 16:03
 4/6 anonim ***** válasza:
Nekem rendben lefutott az én kereső függvényemmel minden pozitív egésszel.
2013. márc. 21. 23:01
Hasznos számodra ez a válasz?
 5/6 Ivan Iljics válasza:

Ha szabad, megkérdezném hogy ez ("kereso(szam,b = 2 * b + 2);") mi?


Értéket adsz át, vagy függvényt hívsz meg?


Valamint ha egy if statement végén return van, akkor logikusan felesleges az else, hiszen vagy el sem indul az if, vagy kilép a végén a függvényből.

2013. márc. 25. 13:08
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:

Ez most nekem szólt?

A kereso(szam, 2 * b + 2); az annyi lenne, hogy meghívja magát a függvény. És ügye két szám kell ennek a függvény működéséhez: a szam, és amelyik elemet keresi. A szam az állandó marad, de az elem az változik, ezért más értékkel hívom meg(attól függően, h mennyit kell, hogy mozduljon..)

2013. márc. 30. 18:18

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!