Этот пост является частью Алгоритмы проблемы решения ряд.
Описание проблемы
Это Самые глубокие листья суммы проблема. Описание выглядит так:
Учитывая двоичное дерево, верните сумму значений его самых глубоких листьев.
Примеры
Input: root = [1,2,3,4,5,null,6,7,null,null,null,null,8] Output: 15
Решение
Моя первая идея состояла в том, чтобы организовать значения узла деревьев в хеш-карту. Уровень дерева в качестве ключа и список значений узла в качестве значения.
Для этого дерева пример
10 ---> level 1 / \ 5 20 ---> level 2 / \ / \ 2 7 15 22 ---> level 3
Карта хешей будет выглядеть так:
{ 1: [10], 2: [5, 20], 3: [2, 7, 15, 22] }
- Первый уровень – это только значение 10
- Второй уровень – это список 5 и 20
- И третий уровень 2, 7, 15 и 22
Мы строим это с помощью функции помощника.
def helper(node, mapper, level): if level in mapper: mapper[level] = mapper[level] + [node.val] else: mapper[level] = [node.val] if node.left: mapper = helper(node.left, mapper, level + 1) if node.right: mapper = helper(node.right, mapper, level + 1) return mapper
Первое, что нужно проверить, находится ли уровень в Mapper. Если это так, добавьте значение текущего узла в список для этого уровня. В противном случае просто установите список только с текущим значением.
Затем перейдите в список влево, если у него левый ребенок. И пройти вправо, если он имеет правильный ребенок.
Мы заканчиваем алгоритм помощника, вернув Mapper. Теперь у нас есть карта со всеми данными дерева, отдельно по уровню.
Нам просто нужно получить самый глубокий уровень с этой карты, получите список с карты, а затем суммируйте все значения из списка.
def sum_deepest_leaves(root): mapper = helper(root, {}, 1) deepest_level = 1 for level in mapper: if level > deepest_level: deepest_level = level deepest_level_nodes_values = mapper[deepest_level] nodes_values_sum = 0 for node_value in deepest_level_nodes_values: nodes_values_sum += node_value return nodes_values_sum
Ресурсы
Оригинал: “https://dev.to/teekay/algorithms-problem-solving-deepest-leaves-sum-1ngj”