[C++] Drzewo binarne, wartosc ojca i brata

rafal9541
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 31 sty 2012, o 20:38
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 11 razy
Pomógł: 1 raz

[C++] Drzewo binarne, wartosc ojca i brata

Post autor: rafal9541 »

Funkcja ma wypisywać wartość ojca oraz brata węzła o wartości
podanej jako argument (lub informację o braku ojca/brata).
Zaczynam tak:

Kod: Zaznacz cały

void wartosciSasiednie(wezel* korzen, int wartosc)
{
   if(wartosc==0 || korzen==NULL)
	   return;
   if(korzen->elem==wartosc)
   {

   }
   wartosciSasiednie(korzen->lewy,wartosc);
   wartosciSasiednie(korzen->prawy,wartosc);

}
mam problem jak napisać tej instrukcji w if, próbowałem parę razy, ale wychodziło z błędami.
Ostatnio zmieniony 28 sty 2013, o 17:26 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
pawellogrd
Użytkownik
Użytkownik
Posty: 844
Rejestracja: 19 lis 2009, o 15:03
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 121 razy
Pomógł: 156 razy

[C++] Drzewo binarne, wartosc ojca i brata

Post autor: pawellogrd »

Nie możesz zejść aż tak nisko do tego węzła, bo nie masz możliwości uzyskania informacji o ojcu i o bracie. Musisz sprawdzać wartości synów węzła czyli coś takiego (dawno nie pisałem w tym języku kodu, więc jakby były jakieś drobne błędy to popraw ale powinno być ok, ogólnie to myślę, że ideę widać):

Kod: Zaznacz cały

void wartosciSasiednie(wezel* korzen, int wartosc)
{
   if(wartosc==0 || korzen==NULL)
      return;
   if(korzen->lewy != NULL && korzen->lewy->elem==wartosc)
   {
       cout << "Wartość ojca: " << korzen->elem << endl;
       if(korzen->prawy == NULL) cout << "Brat jest nullem" << endl;
       else cout << "Wartość brata: " << korzen->prawy->elem << endl;
       return;
   }
   if(korzen->prawy != NULL && korzen->prawy->elem==wartosc)
   {
       \tu wstaw kod analogiczny do powyższego
       return;
   }

   wartosciSasiednie(korzen->lewy,wartosc);
   wartosciSasiednie(korzen->prawy,wartosc);

}
Swoją drogą dlaczego odrzucasz możliwość, że węzeł mógłby mieć wartość \(\displaystyle{ 0}\)?
rafal9541
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 31 sty 2012, o 20:38
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 11 razy
Pomógł: 1 raz

[C++] Drzewo binarne, wartosc ojca i brata

Post autor: rafal9541 »

Bardzo mi pomogłeś, dzięki.-- 1 lut 2013, o 10:24 --Tak poza tematem, dosyć słabo mi idą zadania z drzewami ze względu na rekurencję. Z listami jednokierunkowymi nie miałem problemów bo przechodzenie między elementami wydawało się naturalne, wystarczyło wskazać na następny element. Czy znacie jakieś fajne materiały gdzie można by poczytać o prostych funkcjach drzewa jak np. usuwanie elementów ,żeby się z tym jakoś oswoić?
ODPOWIEDZ