Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

Você recebe uma árvore binária no array root, na ordem de heap: 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. Os valores são distintos e não seguem nenhuma ordem.

Retorne o valor do ancestral comum mais baixo de p e q, os valores de dois nós diferentes: o nó mais profundo cuja subárvore contém ambos. Uma subárvore inclui seu nó superior, então, se q estiver abaixo de p, a resposta é p.

Função

lowestCommonAncestor(root: integer-array, p: integer, q: integer) → integer
rootinteger-array
a árvore binária em ordem por nível, com -1 para uma posição vazia
pinteger
o valor de um nó
qinteger
o valor de outro nó
Retornainteger
o valor do nó mais baixo cuja subárvore contém tanto p quanto q

Restrições

  • 2 ≤ root.length ≤ 32767
  • Cada root[i] é -1 ou um valor com 0 ≤ root[i] ≤ 104.
  • root[0] nunca é -1, e a árvore tem pelo menos dois nós.
  • O array pode terminar com entradas -1 extras após o último nó.
  • Os dois filhos de um espaço vazio também estão vazios, e a profundidade é no máximo 14.
  • Todos os valores na árvore são distintos e não seguem nenhuma ordem.
  • p e q são os valores de dois nós diferentes na árvore, em qualquer ordem.

Exemplos

Entrada
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
Saída
3
Explicação
6 é o filho à esquerda de 3, e 9 fica abaixo de 4, à direita de 3, então eles se encontram em 3. Comparar os valores apontaria para a raiz 8: 6 é menor e 9 é maior.
challenge icon

Para ir além

Se p ou q puderem estar ausentes, sendo -1 a resposta, qual atalho na passagem única falha e como você ainda termina em uma única travessia?

Redefinir código
def lowestCommonAncestor(root, p, q):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]
p = 6
q = 9

Saída Esperada

3