Рекурсивный анализ бинарного дерева с мемоизацией

Swift Сложный functions

Задача «Рекурсивный анализ бинарного дерева с мемоизацией»

Напишите функцию, которая принимает бинарное дерево, представленное в виде массива целых чисел (уровневым обходом, null обозначается как 0), и возвращает максимальную сумму значений узлов от корня до листа, при условии, что можно пропустить не более двух подряд идущих узлов на пути. Используйте рекурсивную функцию с мемоизацией для эффективного вычисления. Дерево содержит до 1000 узлов, значения от -100 до 100.

Формат ввода

Первая строка: целое число n (1 ≤ n ≤ 1000) — количество элементов в массиве. Вторая строка: n целых чисел через пробел — уровневое представление дерева (0 обозначает отсутствие узла).

Формат вывода

Одно целое число — максимальная сумма от корня до листа с учётом возможности пропустить не более двух подряд идущих узлов.

Примеры

Пример 1

ВВОД
3 ab bc ca
ВЫВОД
6

Пример 2

ВВОД
1 10
ВЫВОД
10

Пример 3

ВВОД
5 10 5 15 0 0
ВЫВОД
25

Пример 4

ВВОД
2 abc def
ВЫВОД
0
main.swift