sprawdzanie czy 2 drzewa bst są takie same

0

Tak jak w temacie mam do napisani funkcję, która porówna 2 drzewa i sprawdzi czy są takie same czy nie. 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;
}
 
0

Co znaczy takie same?
Czy te dwa drzewa:

/--3--\
1-\   4
  2

  /--3--\
/-2     4
1

są takie same czy nie?

0

Treść zadania brzmi tak: Zaimplementuj funkcje, która sprawdzi czy dwa drzewa binarne z porzadkiem składaja sie z dokładnie
takich samych wartosci (z takich samych ciagów liczb). Postaraj sie aby funkcja działała
jak najszybciej.

0

To piszesz sobie funkcję firstInOrder() - od korzenia w lewo do oporu. nextInOrder - http://www.geeksforgeeks.org/inorder-successor-in-binary-search-tree/
Dla dwóch drzew lecisz synchronicznie, przy pierwszej różnice zwracasz false

1 użytkowników online, w tym zalogowanych: 0, gości: 1