Вопрос:

Учитывая root бинарного дерева, вернуть длину диаметра дерева.

Диаметр бинарного дерева – это длина самого длинного пути между любыми двумя узлами в дереве. Этот путь может проходить или не проходить через root.

Длина пути между двумя узлами представлена ​​количеством ребер между ними.

Пример 1:

Input: root = [1,2,3,4,5]
Output: 3
Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3].

Решение:

В данной задаче нам нужно найти диаметр бинарного дерева.

Диаметр бинарного дерева – это максимальное расстояние между двумя узлами дерева, независимо от того, включает оно корневой узел или нет.

Итак, первая мысль, которая бросается в глаза, — это использовать метод обхода поиска в глубину для обхода всех узлов, потому что нам нужно пройти все узлы в глубину, чтобы найти самый длинный путь дерева.

Наш первый шаг — проверить, является ли дерево нулевым. Если да, вернуть 0.

if (!root) 
    return 0;

Мы создадим две переменные, left и right, для хранения глубины левого и правого поддеревьев соответственно.

int left = dfs(root -> left);
int right = dfs(root -> right);

Теперь мы найдем максимальное расстояние между двумя узлами и сохраним его в переменной diameter.

Мы будем хранить максимальное значение диаметра и сумму левого и правого поддеревьев.

diameter = max(diameter, left + right);

Теперь мы вернем максимальный диаметр.

return max(left, right) + 1;

После всех этих действий вызовем функцию и получим необходимое значение диаметра.

Когда максимальный диаметр найден, наш последний шаг — сделать значение переменной diameter равным 0. Мы сделаем это, создав переменную закрытого класса.

private:
    int diameter = 0;

Ниже приведена полная реализация задачи:

Спасибо за прочтение!

S.