UÂżytkownik
Czy ktoś by mógł wrzucić samą funkcję z komentarzami, która obliczała to gó**o??
Z góry dziękować.




Offline
UÂżytkownik
mniej więcej tak to będzie... poprawcie mnie jeśli się mylę
int tree :: height(node *temp = NULL)
{
if (temp == NULL) // Jeśli wywołaliśmy funkcję bez parametru to przypisujemy pod temp wskaźnik na pierwszy element.
temp = head;
if (temp == NULL) // Jeśli ten wskaźnik temp nadal jest pusty, to znaczy, że nie ma drzewa... zwracamy 0.
return 0;
int left = 0;
int right = 0; // dwie zmienne które będą pamiętać wysokość prawego poddrzewa i lewego.
// wskaźniki na lewy i prawy element nazwane będą wsk_left i wsk_right ;)
if (wsk_left) left = height(wsk_left); // uruchamiamy tę samą funkcję dla lewego poddrzewa i zapisujemy jego wysokość w zmiennej left;
if (wsk_right) right = height(wsk_right); // to samo dla prawej części
if (left > right) return left + 1;
return right + 1; // a wysokość drzewa to wysokość wyższego poddrzewa + 1. a to jeden to ten węzeł z którego została wywołana funkcja.
}EDIT: nie zamknąłem klamry ^^
Ostatnio edytowany przez Mateusz Buczkowski (2008-05-19 18:10:02)
Offline
UÂżytkownik
Tylko ze funkcja miała nie być elementem klasy drzewa. Ja zrobiłem podobnie, w liście arg funkcji dodałem jedynie (Tree * myTree, node * temp = NULL), wtedy można wywołać funkcję (np w main) podając jako arg tylko wskaźnik na obiekt drzewa. Wraz ze zmianą listy arg funkcji oczywiście trzeba zmienić jej wywołania rekurencyjne


Offline