Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 24. 10. 2009 17:35

ragu
Zelenáč
Příspěvky: 5
Reputace:   
 

mazani ve stromu

ahoj, dostal jsem za úkol přidat do tohoto stromu funkci pro mazání konkrétního prvku, pro případ kdy je prvek jenom list, nebo má jenom jednoho následníka, pokud má dva tak se má vypsat chybová zpráva. teoreticky vím jak to má fungovat, ale neumím to naimplementovat, mohl by mi někdo prosím pomoct? :( děkuji

Code:

#include "stdafx.h"


struct uzel {
    int data;
    struct uzel *levy, *pravy;
    };
struct uzel *koren = NULL;

struct uzel*najdi(int cislo,struct uzel*kde)
    {
    if (kde==NULL) return NULL;
    if (kde->data==cislo) return kde;
    if (kde->data > cislo) return najdi(cislo, kde->levy);
    else return najdi(cislo, kde->pravy);
};
void pridejdostromu (struct uzel*n,struct uzel*kde);

void pridej(int nove)
{
    if(najdi(nove,koren)!=NULL) return;
    struct uzel*n = (struct uzel*)
        malloc(sizeof(struct uzel));
        if(n==NULL) exit(5);
        n->data=nove;
        n->levy=NULL;
        n->pravy=NULL;
        if (koren==NULL)
            koren=n;
        else pridejdostromu(n,koren);

}

void pridejdostromu (struct uzel*n,struct uzel*kde)
{
    if(n->data<kde->data)
    {if(kde->levy==NULL) kde->levy=n;
    else pridejdostromu(n,kde->levy);
    }
    else {if(kde->pravy==NULL)kde->pravy=n;
    else pridejdostromu(n,kde->pravy);
    }
}

void inorder(struct uzel*x)
{ 
    if(x==NULL) return;
    inorder(x->levy);
    printf("%i ",x->data);
    inorder(x->pravy);

}
void inorderobracene(struct uzel*x)
{ 
    if(x==NULL) return;
    inorder(x->pravy);
    printf("%i ",x->data);
    inorder(x->levy);

}
//void smaz(int prvek,10)
//mazani bez ditete, mazani s jednim, kdyz 2 deti tak nejde smazat
    
int _tmain(int argc, _TCHAR* argv[])
{
    pridej(5);
    pridej(2);
    pridej(10);
    pridej(12);
    if (najdi(2,koren)==NULL)printf("NE ");
    else printf("ANO ");
    if (najdi(15,koren)==NULL)printf("NE ");
    else printf("ANO ");
    inorder(koren);
    inorderobracene(koren);
    return 0;
}

Offline

 

#2 25. 10. 2009 18:15

ragu
Zelenáč
Příspěvky: 5
Reputace:   
 

Re: mazani ve stromu

prosím pomožte někdo, fakt si s tím nevím rady :(

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson