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