Menu
CoddyTech

Boundary Traversal of Binary Tree

MittelBaumdurchlaufpython iconjava iconcpp iconc iconjs icon+10

Das Array root enthält einen Binärbaum in Ebenenreihenfolge: die Wurzel an Index 0, die Kinder von Index i an den Indizes 2i+1 (links) und 2i+2 (rechts), -1 für eine leere Stelle und möglicherweise zusätzliche -1-Einträge am Ende. Ein Blatt ist ein Knoten ohne Kinder.

Gib den Rand gegen den Uhrzeigersinn von der Wurzel aus zurück:

  1. Die Wurzel.
  2. Der linke Rand, von oben nach unten: Beginne beim linken Kind der Wurzel und gehe zum linken Kind, falls vorhanden, andernfalls zum rechten Kind. Höre vor einem Blatt auf.
  3. Jedes Blatt, von links nach rechts.
  4. Der rechte Rand, von unten nach oben: das Spiegelbild des linken Randes, beginnend beim rechten Kind der Wurzel.

Kein Knoten wird zweimal aufgeführt, daher besteht ein Baum mit nur einem Knoten ausschließlich aus seiner Wurzel.

Funktion

boundaryTraversal(root: integer-array) → integer-array
rootinteger-array
der Binärbaum in Ebenenreihenfolge, mit -1 für eine leere Stelle
Gibt zurückinteger-array
die Randwerte, gegen den Uhrzeigersinn von der Wurzel aus

Einschränkungen

  • 1 ≤ root.length ≤ 32767
  • Jedes root[i] ist -1 oder ein Wert mit 0 ≤ root[i] ≤ 105.
  • 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 eines leeren Platzes sind ebenfalls leer, und die Tiefe beträgt höchstens 14.
  • Knotenwerte sind verschieden.

Beispiele

Eingabe
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
Ausgabe
[7, 3, 1, 4, 6, 8, 9]
Erklärung
Nach der Wurzel 7 ist die linke Grenze 3: Ihr Kind 1 ist ein Blatt. Die Blätter sind 1, 4, 6, 8. Die rechte Grenze ist 9, oberhalb des Blatts 8.
challenge icon

Weiterführende Frage

Wie würdest du den Rand im Uhrzeigersinn auflisten: die Wurzel, die rechte Kante von oben nach unten, die Blätter von rechts nach links und dann die linke Kante von unten nach oben?

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

Test #1

Test #2

Test #3

Argument

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

Erwartete Ausgabe

[7, 3, 1, 4, 6, 8, 9]