Menu
CoddyTech

Subtree of Another Tree

Você recebe duas árvores binárias, root e subRoot, cada uma armazenada em um array em ordem por nível: a raiz no índice 0, os filhos do índice i em 2*i+1 (esquerdo) e 2*i+2 (direito), e -1 para uma posição vazia. Um array pode terminar com entradas extras -1.

Retorne true se algum nó de root, com todos os seus descendentes, tiver exatamente a mesma forma e os mesmos valores que subRoot, e false caso contrário. A árvore inteira root também conta.

Função

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
a árvore a ser pesquisada, em ordem por nível, com -1 para uma posição vazia
subRootinteger-array
a árvore a ser procurada, no mesmo formato
Retornaboolean
true se subRoot aparece em root como um nó com todos os seus descendentes, false caso contrário

Restrições

  • 1 ≤ root.length ≤ 32767 e 1 ≤ subRoot.length ≤ 32767
  • Cada entrada é -1 ou um valor de 0 a 104.
  • root[0] e subRoot[0] nunca são -1, então ambas as árvores têm pelo menos um nó.
  • Qualquer um dos arrays pode terminar com entradas -1 extras após seu último nó.
  • Ambos os filhos de um espaço vazio também estão vazios, e cada árvore tem profundidade de no máximo 14.
  • Os valores podem se repetir.

Exemplos

Entrada
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Saída
true
Explicação
O nó 2 no índice 1 tem os filhos 1 e 3, e ambos são folhas. Isso é exatamente subRoot.
challenge icon

Para ir além

Você consegue criar uma impressão digital de cada subárvore a partir de seu valor e das impressões digitais de seus filhos, de modo que uma comparação com subRoot custe O(1)? O que você faz quando duas subárvores diferentes colidem?

Redefinir código
def isSubtree(root, subRoot):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

true