Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Du erhältst zwei Arrays, preorder und inorder, die die unterschiedlichen Werte desselben binären Baums auflisten. Bei der Preorder-Traversierung wird zuerst ein Knoten besucht, dann sein linker Teilbaum und anschließend sein rechter Teilbaum. Bei der Inorder-Traversierung wird zuerst der linke Teilbaum besucht, dann der Knoten und anschließend der rechte Teilbaum.

Baue den Baum wieder auf und gib ihn als Array in Ebenenreihenfolge zurück: die Wurzel an Index 0, die Kinder von Index i an den Indizes 2i+1 (links) und 2i+2 (rechts) sowie -1 für jede leere Stelle. Das Array endet beim letzten Knoten und enthält keine nachgestellten -1.

Funktion

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
die Werte in Preorder-Reihenfolge: Knoten, linker Teilbaum, rechter Teilbaum
inorderinteger-array
die Werte in Inorder-Reihenfolge: linker Teilbaum, Knoten, rechter Teilbaum
Gibt zurückinteger-array
den Baum in Ebenenreihenfolge, mit -1 für leere Stellen und ohne abschließendes -1

Einschränkungen

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104, und alle Werte sind verschieden.
  • inorder enthält dieselben Werte, und beide Arrays beschreiben denselben Binärbaum.
  • Die Tiefe des Baums beträgt höchstens 14, daher ist jeder Index in der Antwort kleiner als 214-1 = 16383.

Beispiele

Eingabe
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Ausgabe
[7, 3, 4, 0, 9, -1, 6]
Erklärung
Die Präorder beginnt mit der Wurzel 7. Sie befindet sich an der inorder-Position 3, daher kommen 0, 3, 9 nach links und 4, 6 nach rechts. 4 hat nur ein rechtes Kind, 6, daher bleibt der Index 5 bei -1.
challenge icon

Weiterführende Frage

Kannst du den Baum ohne Rekursion in einem Durchlauf über preorder mit einem expliziten Stack neu aufbauen?

Code zurücksetzen
def buildTree(preorder, inorder):
    # Schreibe hier den Code

Test #1

Test #2

Argumente

preorder = [7, 3, 0, 9, 4, 6]
inorder = [0, 3, 9, 7, 4, 6]

Erwartete Ausgabe

[7, 3, 4, 0, 9, -1, 6]