Menu
CoddyTech

Subtree of Another Tree

Du erhältst zwei Binärbäume, root und subRoot, die jeweils in einem Array in Ebenenreihenfolge gespeichert sind: die Wurzel an Index 0, die Kinder von Index i an den Indizes 2*i+1 (links) und 2*i+2 (rechts) und -1 für eine leere Stelle. Ein Array kann mit zusätzlichen -1-Einträgen enden.

Gib true zurück, wenn ein Knoten von root zusammen mit all seinen Nachkommen genau dieselbe Struktur und dieselben Werte wie subRoot hat, andernfalls false. Auch der gesamte Baum root zählt.

Funktion

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
der zu durchsuchende Baum in Ebenenreihenfolge, wobei -1 eine leere Stelle kennzeichnet
subRootinteger-array
der Baum, nach dem gesucht werden soll, im selben Format
Gibt zurückboolean
true, wenn subRoot in root als Knoten mit all seinen Nachkommen vorkommt, andernfalls false

Einschränkungen

  • 1 ≤ root.length ≤ 32767 und 1 ≤ subRoot.length ≤ 32767
  • Jeder Eintrag ist -1 oder ein Wert von 0 bis 104.
  • root[0] und subRoot[0] sind niemals -1, daher haben beide Bäume mindestens einen Knoten.
  • Jedes der beiden Arrays kann nach seinem letzten Knoten mit zusätzlichen -1-Einträgen enden.
  • Beide Kinder einer leeren Stelle sind ebenfalls leer, und jeder Baum hat eine Tiefe von höchstens 14.
  • Werte können sich wiederholen.

Beispiele

Eingabe
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Ausgabe
true
Erklärung
Der Knoten 2 am Index 1 hat die Kinder 1 und 3, und beide sind Blätter. Das ist genau subRoot.
challenge icon

Weiterführende Frage

Kannst du jeden Teilbaum anhand seines Werts und der Fingerabdrücke seiner Kinder identifizieren, sodass ein Vergleich mit subRoot O(1) kostet? Was machst du, wenn zwei verschiedene Teilbäume kollidieren?

Code zurücksetzen
def isSubtree(root, subRoot):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

Erwartete Ausgabe

true