Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

Ein Binärbaum wird im Heap-Format im Array root gespeichert: Die Wurzel befindet sich am Index 0, die Kinder des Index i befinden sich bei 2*i+1 (links) und 2*i+2 (rechts), -1 kennzeichnet eine leere Stelle, und das Array kann mit zusätzlichen -1-Einträgen enden.

Die Wurzel befindet sich in Spalte 0; ein linkes Kind befindet sich eine Spalte links von seinem Elternknoten, ein rechtes Kind eine Spalte rechts. Gib für jede Spalte eine Liste zurück, von links nach rechts. Liste die Knoten innerhalb einer Spalte von oben nach unten auf und ordne Knoten, die sich eine Spalte und eine Tiefe teilen, nach aufsteigendem Wert.

Funktion

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
der Baum in Heap-Reihenfolge, mit -1 für eine leere Stelle
Gibt zurückinteger-2d-array
eine Liste von Werten pro Spalte, beginnend mit der Spalte ganz links, jeweils von oben nach unten

Einschränkungen

  • 1 ≤ root.length ≤ 32767
  • Jedes root[i] ist -1 oder ein Wert mit 0 ≤ root[i] ≤ 5000, 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, 1, 7], [9], [6]]
Erklärung
Spalte 0 enthält die Wurzel 5, darunter zwei Ebenen tiefer 7 und 1. Diese beiden haben dieselbe Spalte und Tiefe, daher kommt 1 vor 7, obwohl 7 weiter links steht.
challenge icon

Weiterführende Frage

Jeder Wert ist höchstens 5000. Kannst du das nutzen, um die Vergleichssortierung wegzulassen und die Aufgabe in O(n + 5000) Zeit abzuschließen?

Code zurücksetzen
def verticalTraversal(root):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argument

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

Erwartete Ausgabe

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