Рубрики
Без рубрики

Алгоритзы проблемы решения: самые глубокие листья суммы

Решение алгоритмов Проблемы с TK. Теги с алгоритмами, Python, Computerscience, интервью.

Этот пост является частью Алгоритмы проблемы решения ряд.

Описание проблемы

Это Самые глубокие листья суммы проблема. Описание выглядит так:

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

Примеры

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”