Menu
CoddyTech

Lowest Common Ancestor of a BST

Você recebe uma árvore binária de busca armazenada no array tree em ordem por nível, e dois valores p e q que aparecem nela. A raiz fica no índice 0, os filhos do nó no índice i ficam nos índices 2*i+1 (esquerda) e 2*i+2 (direita), -1 marca uma posição vazia, e o array pode terminar com entradas -1 extras. Em uma árvore binária de busca, todo valor na subárvore esquerda de um nó é menor que o valor do nó, e todo valor na subárvore direita é maior.

Escreva uma função chamada lowestCommonAncestor que retorna o valor do ancestral comum mais baixo de p e q: o nó mais profundo que tem ambos em sua subárvore. Um nó conta como parte da própria subárvore, então, se p estiver acima de q, a resposta será o próprio p.

Função

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
a árvore binária de busca em ordem por níveis, com -1 para uma posição vazia
pinteger
o primeiro valor a encontrar
qinteger
o segundo valor a encontrar
Retornainteger
o valor do nó mais profundo que tem tanto p quanto q em sua subárvore

Restrições

  • 1 ≤ tree.length ≤ 32767
  • Cada tree[i] é -1 ou um valor com 0 ≤ tree[i] ≤ 105.
  • tree[0] nunca é -1, então a árvore tem pelo menos um nó.
  • A matriz pode terminar com entradas extras -1 após o último nó.
  • Ambos os filhos de um espaço vazio também estão vazios, e a profundidade é no máximo 14.
  • A árvore é uma árvore binária de busca válida, portanto todos os seus valores são distintos.
  • p e q são valores de nós na árvore. Eles podem vir em qualquer ordem e podem ser iguais.

Exemplos

Entrada
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Saída
8
Explicação
O 3 é o filho à esquerda de 8, e o 15 fica abaixo de 12, à direita de 8. Subindo a partir de cada um deles, o primeiro nó que ambos alcançam é 8, então essa é a resposta; a raiz 20 também é um ancestral comum, mas está em um nível mais alto.

lock icon+12 testes ocultos ao enviar

challenge icon

Para ir além

O que você mudaria se p ou q pudesse estar ausente da árvore e a função tivesse que retornar -1 nesse caso?

Redefinir código
def lowestCommonAncestor(tree, p, q):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

Esperado

8