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
#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;
}