Menu
CoddyTech

Subtree of Another Tree

Ti vengono dati due alberi binari, root e subRoot, ciascuno memorizzato in un array in ordine per livelli: la radice all'indice 0, i figli dell'indice i agli indici 2*i+1 (sinistro) e 2*i+2 (destro), e -1 per una posizione vuota. Un array può terminare con ulteriori voci -1.

Restituisci true se un nodo di root, con tutti i suoi discendenti, ha esattamente la stessa forma e gli stessi valori di subRoot, e false altrimenti. Anche l'intero root conta.

Funzione

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
l'albero da cercare, in ordine per livelli, con -1 per uno spazio vuoto
subRootinteger-array
l'albero da cercare, nello stesso formato
Restituisceboolean
true se subRoot compare in root come nodo con tutti i suoi discendenti, false altrimenti

Vincoli

  • 1 ≤ root.length ≤ 32767 e 1 ≤ subRoot.length ≤ 32767
  • Ogni elemento è -1 o un valore compreso tra 0 e 104.
  • root[0] e subRoot[0] non sono mai -1, quindi entrambi gli alberi hanno almeno un nodo.
  • Entrambi gli array possono terminare con voci -1 aggiuntive dopo il loro ultimo nodo.
  • Entrambi i figli di uno spazio vuoto sono vuoti a loro volta e ogni albero ha una profondità massima di 14.
  • I valori possono ripetersi.

Esempi

Input
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Output
true
Spiegazione
Il nodo 2 all'indice 1 ha come figli 1 e 3, ed entrambi sono foglie. Questo è esattamente subRoot.
challenge icon

Per approfondire

Puoi calcolare l’impronta digitale di ogni sottoalbero a partire dal suo valore e dalle impronte digitali dei suoi figli, così che il confronto con subRoot costi O(1)? Cosa fai quando due sottoalberi diversi entrano in collisione?

Ripristina il codice
def isSubtree(root, subRoot):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

true