Menu
CoddyTech

Validate Binary Search Tree

Você recebe uma árvore binária armazenada no array tree em ordem por níveis. A raiz fica no índice 0, os filhos do nó no índice i ficam em 2*i+1 (à esquerda) e 2*i+2 (à direita), -1 marca uma posição vazia, e o array pode terminar com entradas extras -1.

Escreva uma função chamada isValidBST que retorne true se a árvore for uma árvore binária de busca e false caso contrário. Em uma árvore binária de busca, o valor de cada nó é estritamente maior que todos os valores de sua subárvore esquerda e estritamente menor que todos os valores de sua subárvore direita. Dois valores iguais nunca podem estar ambos em uma árvore válida.

Função

isValidBST(tree: integer-array) → boolean
treeinteger-array
a árvore binária em ordem por nível, com -1 para uma posição vazia
Retornaboolean
verdadeiro se a árvore for uma árvore binária de busca, falso caso contrário

Restrições

  • 1 ≤ tree.length ≤ 32767
  • Cada tree[i] é -1 ou um valor tal que 0 ≤ tree[i] ≤ 105.
  • tree[0] nunca é -1, então a árvore tem pelo menos um nó.
  • A matriz 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 é de no máximo 14.
  • Os valores podem se repetir.

Exemplos

Entrada
tree = [8, 3, 12, 1, 6, 10, 15]
Saída
true
Explicação
Cada nó fica no lado correto de todos os nós acima dele. Lendo em ordem (subárvore esquerda, nó, subárvore direita), os valores aparecem como 1, 3, 6, 8, 10, 12, 15, em ordem estritamente crescente, como ocorre em uma árvore de busca.

lock icon+16 testes ocultos ao enviar

challenge icon

Para ir além

O pai do nó no índice i fica em (i-1)/2, arredondado para baixo. Você consegue percorrer a árvore em ordem usando espaço extra O(1), passando pelos pais em vez de manter uma pilha ou recorrer à recursão?

Redefinir código
def isValidBST(tree):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

tree = [8, 3, 12, 1, 6, 10, 15]

Esperado

true