Общее время посещения всех узлов бинарного дерева
Учитывая бинарное дерево, найдите общее время посещения всех узлов от корневого узла. Посещение дочернего узла с его родительского узла будет стоить 1 единицу времени, а посещение родителя с дочернего узла вызовет 0 единиц времени.
Примеры:
Input:
Output: 5
Explanation: The traversals taking 1 unit of time are 1->2, 2->4, 4->5, 1->3 and 3->6.Input:
Output: 1
Подход: Загвоздка здесь в том, что общее время будет равно количеству ребер в бинарном дереве. Итак, ответ на эту проблему можно найти для этих двух случаев:
Общее время посещения всех узлов бинарного дерева, если известно количество узлов (N) : Если количество узлов в бинарном дереве уже известно как N , то количество ребер в нем равно N-1 . Таким образом, ответ N-1 в этом случае.
Временная сложность: O(1)
Вспомогательное пространство: O(1)
Общее время посещения всех узлов бинарного дерева, если количество узлов неизвестно: Примените поиск в глубину, чтобы получить количество ребер и вернуть его в качестве ответа. Теперь выполните следующие шаги, чтобы решить эту проблему:
- Создайте рекурсивную функцию totalTime , которая примет узел в качестве параметра и вернет количество ребер под ним.
- Итак, получите количество ребер в левом потомке, вызвав функцию totalTime для левого потомка и добавив к ней единицу.
- Повторите вышеуказанный шаг для правого ребенка.
- В конце верните сумму ребер слева и справа.
- Выведите ответ в соответствии с описанным выше подходом.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(V), где V — количество узлов бинарного дерева.
Вспомогательное пространство: O(1)
