Datuve :: Forums :: Arhīvs :: Rekursīvas funkcijas problēma.

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 61

Reģistrētie lietotāji online: 0

Viesi online: 61

Datuve.lv video
Top.LV

Rekursīvas funkcijas problēma.

Ievietoja: Artismtz @ 2010.11.21 18:35  

Veidoju programmu C++, kas darbojas ar bināro koku.
Koks sastāv no šādām struktūrām:

struct node {

node *left;
node *right;
int data;   };

Problēma - rekursīva funkcija, kas atgriež mezglu (node) ar konkrēto skaitli(data), dažreiz nestrādā, jeb atgriež kādu 'randomu' adresi, ja jāatgriež kāds mezgls no saknes pa labi.

node *gotonode(node *node, int data)
{
 if (node->left != NULL) return gotonode(node->left, data);
 if (node->data==data) return node;
 if (node->right != NULL) return gotonode(node->right, data);

   };

Piebilde, šai funkcijai netiek uzdots meklēt mezglus, kuri kokā neeksistē un ar pašu koku arī viss ir kārtībā.
Ja redzat kaut ko loģiski nepareizu kāpēc funkcija nepareizi atgriež vajadzīgā mezgla adresi tad palīdziet. Jau otro dienu ņemos ar šo vienu funkciju :)
Paldies!

Komentāri:

#1 Eric @ 2010.11.21 19:21

1. Vai funkcija, kas kokā liek iekšā elementus uzstāda left = right = NULL?

2. parasti binārajā kokā skaitlus liek sakārtotā veidā, piemēram, lielākos pa labi, mazākos pa kreisi. Tas būtiski samazina meklēšanas sarežģītību

3. situācijā, kad neizpildās node->data == data un mezgls = lapa funkcija neatgriež pilnīgi neko, jeb c gadījumā kaut kādu radom crapu..

#2 Artismtz @ 2010.11.21 20:56

Eric rakstīja:

1. Vai funkcija, kas kokā liek iekšā elementus uzstāda left = right = NULL?

2. parasti binārajā kokā skaitlus liek sakārtotā veidā, piemēram, lielākos pa labi, mazākos pa kreisi. Tas būtiski samazina meklēšanas sarežģītību

3. situācijā, kad neizpildās node->data == data un mezgls = lapa funkcija neatgriež pilnīgi neko, jeb c gadījumā kaut kādu radom crapu..

1) Jā.
2) Uzdevumā dotas komandas, kuras veido koku dažādi.
3) Paldies, beidzot ar tavu padomu, pa soļiem vēlreiz izsekojot kā darbotos funkcija konkrētā gadījumā sapratu, kas par lietu. Pirmais return bija lieks.