Для кожного вузла в збалансованому двійковому дереві максимальна різниця у висоті лівого дочірнього дерева та правого дочірнього піддерев’я становить не більше 1.
Висота двійкового дерева - це відстань від кореневого вузла до дочірнього вузла, що знаходиться найдалі від кореня.
Нижче наведено приклад:
2 <-- root: Height 1
/ \
7 5 <-- Height 2
/ \ \
2 6 9 <-- Height 3
/ \ /
5 11 4 <-- Height 4
Висота двійкового дерева: 4
Далі наведені двійкові дерева та звіт про збалансованість чи ні:
Дерево вгорі незбалансоване .
Наведене вище дерево збалансовано .
Напишіть найкоротшу можливу програму, яка приймає як вхід корінь двійкового дерева і повертає значення фальси, якщо дерево не врівноважене, а триєчне значення, якщо дерево збалансоване.
Вхідні дані
Корінь двійкового дерева. Це може бути у вигляді посилання на кореневий об'єкт або навіть список, що є дійсним поданням бінарного дерева.
Вихідні дані
Повертає трибунове значення: Якщо дерево збалансовано
Повертає значення фальси: Якщо дерево не врівноважено.
Визначення бінарного дерева
Дерево - це об'єкт, який містить значення і два інші дерева, або покажчики на них.
Структура двійкового дерева виглядає приблизно так:
typedef struct T
{
struct T *l;
struct T *r;
int v;
}T;
Якщо використовується представлення списку для двійкового дерева, воно може виглядати приблизно так:
[root_value, left_node, right_node]
4
, чи залишилося дерево збалансованим?