Menu
CoddyTech

Top View of Binary Tree

Du erhältst einen Binärbaum, der in der Array-Variable root in Heap-Reihenfolge gespeichert ist: die Wurzel an Index 0, die Kinder von Index i an 2*i+1 (links) und 2*i+2 (rechts) und -1 für eine leere Stelle.

Die Wurzel befindet sich in Spalte 0; ein linkes Kind steht eine Spalte links von seinem Elternknoten und ein rechtes Kind eine Spalte rechts. Von oben gesehen siehst du den Knoten mit der geringsten Tiefe in jeder Spalte; bei Gleichstand denjenigen, der in seiner Ebene von links nach rechts zuerst kommt (mit dem kleineren Index). Gib die Werte zurück, die du siehst, von der am weitesten links gelegenen Spalte bis zur am weitesten rechts gelegenen.

Funktion

topView(root: integer-array) → integer-array
rootinteger-array
der Baum in Heap-Reihenfolge, mit -1 für eine leere Stelle
Gibt zurückinteger-array
der von oben aus betrachtete Wert in jeder Spalte, beginnend mit der ganz linken Spalte

Einschränkungen

  • 1 ≤ root.length ≤ 32767
  • Jedes root[i] ist -1 oder ein Wert mit 0 ≤ root[i] ≤ 104, und kein Wert kommt zweimal vor.
  • root[0] ist niemals -1, daher hat der Baum mindestens einen Knoten.
  • Das Array kann nach dem letzten Knoten mit zusätzlichen -1-Einträgen enden.
  • Beide Kinder einer leeren Stelle sind ebenfalls leer, und der Baum hat höchstens 14 Ebenen.

Beispiele

Eingabe
root = [5, 2, 9, 4, 7, 1, 6]
Ausgabe
[4, 2, 5, 9, 6]
Erklärung
Von links nach rechts enthalten die Spalten 4 (Spalte -2), 2 (-1), die Wurzel 5 (0), 9 (1) und 6 (2). 7 und 1 befinden sich ebenfalls in Spalte 0, aber die Wurzel liegt über ihnen.
challenge icon

Weiterführende Frage

Bei Knotenobjekten statt einem Array gibt es keinen Index, der einen Gleichstand entscheiden könnte. Wie würdest du die Gleichstandsregel formulieren, und ändert sich dein Code für die Breitensuche?

Code zurücksetzen
def topView(root):
    # Schreibe hier deinen Code

Test #1

Test #2

Test #3

Argument

root = [5, 2, 9, 4, 7, 1, 6]

Erwartete Ausgabe

[4, 2, 5, 9, 6]