Rekursive Analyse eines binären Baums mit Memoisierung

Swift Hard functions

Aufgabe «Rekursive Analyse eines binären Baums mit Memoisierung»

Schreiben Sie eine Funktion, die einen binären Baum akzeptiert, der als Array von ganzen Zahlen dargestellt wird (Ebenendurchlauf, null wird als 0 bezeichnet), und die maximale Summe der Knotenwerte von der Wurzel bis zum Blatt zurückgibt, unter der Bedingung, dass auf dem Pfad höchstens zwei aufeinanderfolgende Knoten übersprungen werden können. Verwenden Sie eine rekursive Funktion mit Memoisierung für eine effiziente Berechnung. Der Baum enthält bis zu 1000 Knoten, Werte von -100 bis 100.

Eingabeformat

Erste Zeile: eine ganze Zahl n (1 ≤ n ≤ 1000) — die Anzahl der Elemente im Array. Zweite Zeile: n ganze Zahlen durch Leerzeichen getrennt — die Ebenendarstellung des Baums (0 bedeutet das Fehlen eines Knotens).

Ausgabeformat

Eine ganze Zahl — die maximale Summe von der Wurzel bis zum Blatt unter Berücksichtigung der Möglichkeit, höchstens zwei aufeinanderfolgende Knoten zu überspringen.

Beispiele

Beispiel 1

EINGABE
3 ab bc ca
AUSGABE
6

Beispiel 2

EINGABE
1 10
AUSGABE
10

Beispiel 3

EINGABE
5 10 5 15 0 0
AUSGABE
25

Beispiel 4

EINGABE
2 abc def
AUSGABE
0
main.swift