Tak jak w temacie mam do napisania funkcję, która porówna 2 drzewa z porządkiem i sprawdzi czy są takie same, tzn. czy składają się z tych samych elementów. Za bardzo nie wiem jak kto zrobić. Napisałem tylko fragment funkcji. Ktoś ma jakiś pomysł jak to napisać? Poniżej kod programu:
#include<stdio.h>
#include<stdlib.h>
struct elD
{
int klucz ;
int licznik;
struct elD *prawy;
struct elD *lewy;
struct elD *ojciec;
};
typedef struct elD eldrzewa;
typedef eldrzewa *drzewo;
DodajD(drzewo *d, int klucz){
if (*d==0)
{
*d=(drzewo)malloc(sizeof(eldrzewa));
(*d)->klucz=klucz;
(*d)->licznik=1;
(*d)->lewy=(*d)->prawy=0;
}
else if (klucz<(*d)->klucz)
DodajD(&(*d)->lewy, klucz);
else if (klucz>(*d)->klucz)
DodajD(&(*d)->prawy, klucz);
else
(*d)->licznik++;
}
void DDZP(drzewo d) //drukowanie drzewa z porzadkiem
{
if(d->lewy!=NULL) //jezeli ma dzieci po lewej stronie wywolaj funkcje rekurencyjnie
DDZP(d->lewy);
printf("%d\n", d->klucz); //wypisz wartosc
if(d->prawy!=NULL) //jezeli ma dzieci po prawej stronie wywolaj rekurencyjnie
DDZP(d->prawy);
}
void Sprawdz(drzewo *d, drzewo *w) //sprawdzanie czy 2 drzewa sa takie same
{
int x=0;
do
{
if((*d)->klucz!=(*w)->klucz)
{
printf("Drzewa nie sa takie same");
x=1;
}
}
while(d!=0 && w!=0 && x!=1);
if(x==0)
printf("Drzewa sa takie same");
}
int main()
{
int wybor;
int liczba;
drzewo d=0, w=0;
int i;
printf("[1] Dodanie do pierwszego drzewa\n");
printf("[2] Wyswietlenie pierwszego drzewa\n");
printf("[3] Dodanie do drugiego drzewa\n");
printf("[4] Wyswietlenie drugiego drzewa\n");
printf("[5] Sprawdzenie czy 2 drzewa sa takie same?\n");
printf("[6] Wyjscie\n");
do{
printf("Wybierz: ");
scanf("%d", &wybor);
switch(wybor)
{
case 1:
printf("Dodanie do pierwszego drzewa\n");
printf("Podaj liczbe: ");
scanf("%d", &liczba);
DodajD(&d, liczba);
printf("\n");
break;
case 2:
printf("Wyswietlenie pierwszego drzewa\n");
DDZP(d);
printf("\n");
break;
case 3:
printf("Dodanie do drugiego drzewa\n");
printf("Podaj liczbe: ");
scanf("%d", &liczba);
DodajD(&w, liczba);
printf("\n");
break;
case 4:
printf("Wyswietlenie drugiego drzewa\n");
DDZP(w);
printf("\n");
break;
case 5:
printf("Sprawdzenie czy 2 drzewa sa takie same?\n");
Sprawdz(&d, &w);
printf("\n");
break;
break;
case 6:
printf("Wyszedłes z programu!");
return 0;
break;
}
}while( wybor>=1 );
return 0;
}