Menu
CoddyTech

Subtree of Another Tree

Se te dan dos árboles binarios, root y subRoot, cada uno almacenado en un arreglo en orden por niveles: la raíz en el índice 0, los hijos del índice i en 2*i+1 (izquierda) y 2*i+2 (derecha), y -1 para una posición vacía. Un arreglo puede terminar con entradas -1 adicionales.

Devuelve true si algún nodo de root, junto con todos sus descendientes, tiene exactamente la misma forma y los mismos valores que subRoot, y false en caso contrario. También se considera el árbol completo root.

Función

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
el árbol que se va a buscar, en orden por niveles, con -1 para una posición vacía
subRootinteger-array
el árbol que se debe buscar, en el mismo formato
Devuelveboolean
verdadero si subRoot aparece en root como un nodo con todos sus descendientes, falso en caso contrario

Restricciones

  • 1 ≤ root.length ≤ 32767 y 1 ≤ subRoot.length ≤ 32767
  • Cada entrada es -1 o un valor de 0 a 104.
  • root[0] y subRoot[0] nunca son -1, así que ambos árboles tienen al menos un nodo.
  • Cualquiera de los dos arreglos puede terminar con entradas adicionales -1 después de su último nodo.
  • Ambos hijos de un espacio vacío también están vacíos, y cada árbol tiene una profundidad de como máximo 14.
  • Los valores pueden repetirse.

Ejemplos

Entrada
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Salida
true
Explicación
El nodo 2 en el índice 1 tiene como hijos 1 y 3, y ambos son hojas. Eso es exactamente subRoot.
challenge icon

Para ir más allá

¿Puedes calcular una huella digital de cada subárbol a partir de su valor y de las huellas digitales de sus hijos, para que compararlo con subRoot cueste O(1)? ¿Qué haces cuando colisionan dos subárboles diferentes?

Restablecer código
def isSubtree(root, subRoot):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

true