Dla każdego węzła w zrównoważonym drzewie binarnym maksymalna różnica wysokości w lewym poddrzewie i prawym poddrzewie wynosi co najwyżej 1.
Wysokość drzewa binarnego to odległość od węzła głównego do potomka węzła, który jest najdalej od korzenia.
Poniżej znajduje się przykład:
2 <-- root: Height 1
/ \
7 5 <-- Height 2
/ \ \
2 6 9 <-- Height 3
/ \ /
5 11 4 <-- Height 4
Wysokość drzewa binarnego: 4
Poniżej przedstawiono drzewa binarne i raport o tym, czy są one zrównoważone:
Drzewo powyżej jest niezrównoważone .
Powyższe drzewo jest zrównoważone .
Napisz najkrótszy możliwy program, który przyjmuje jako dane wejściowe korzeń drzewa binarnego i zwraca wartość falsey, jeśli drzewo jest niezrównoważone, oraz wartość prawdy, jeśli drzewo jest zrównoważone.
Wejście
Korzeń drzewa binarnego. Może to mieć postać odwołania do obiektu głównego lub nawet listy, która jest prawidłową reprezentacją drzewa binarnego.
Wynik
Zwraca prawdziwą wartość: Jeśli drzewo jest zrównoważone
Zwraca wartość falsey: Jeśli drzewo nie jest zrównoważone.
Definicja drzewa binarnego
Drzewo to obiekt zawierający wartość oraz dwa inne drzewa lub wskaźniki do nich.
Struktura drzewa binarnego wygląda mniej więcej tak:
typedef struct T
{
struct T *l;
struct T *r;
int v;
}T;
Jeśli używasz reprezentacji listy dla drzewa binarnego, może to wyglądać mniej więcej tak:
[root_value, left_node, right_node]
4
, pozostałe drzewo jest zrównoważone?