Árvore Binária de Pesquisa (BST)

Uma Árvore Binária de Pesquisa (em inglês, BST - Binary Search Tree) é um tipo especial de árvore binária que segue duas propriedades:
  1. Todos os nós-filho à esquerda têm um valor menor do que o nó-pai.
  1. Todos os nós-filho à direita têm um valor maior do que o nó-pai.
Assim, para cada nó, ou lhe falta um nó-filho, ou então possui um nó menor à esquerda e um maior à direita.
Uma árvore binária de pesquisa com 8 nós
Uma árvore binária de pesquisa com 8 nós
Esta propriedade é especialmente útil para pesquisar elementos numa árvore binária. Se estivermos à procura de um valor x, desta forma, sabemos sempre para que lado avançar. No exemplo apresentado acima, para encontrar o nó com valor 3, começamos por observar o nó raiz, com valor 5. Como 5 é maior do que 3, avançamos para a esquerda. De seguida, vemos o nó com valor 2 e, como 2 é menor do que 3, avançamos para a direita. Depois examinamos o nó com valor 4 e, como 4 é maior do que 3, avançamos para a esquerda. Por fim, encontramos o nó com valor 3 e, sendo 3 igual a 3, significa que localizámos o nó desejado.
# Assuma que nós inexistentes são None em vez de terem um valor de 0
def search(node: Node | None, x: int):
    """ Retorna True se x estiver presente na árvore e False caso contrário """
    if node is None:              # Se chegámos ao fim da árvore
        return False              # Não encontrámos o valor x
    if x == node.value:           # Se x é igual a node.value
        return True               # => encontrámos o valor x na árvore

    if x < node.value:            # Se x é menor => precisamos de ir para a esquerda
        return search(node.left)  # Tentar encontrar x na subárvore esquerda
    return search(node.right)     # Caso contrário, tentar encontrar x na subárvore direita
Esta forma de pesquisa pode ser muito eficiente se a altura da árvore não for demasiado grande. Em cada iteração, avançamos para a subárvore à esquerda ou à direita, pelo que o número de operações ao pesquisar nesta árvore binária de pesquisa será equivalente à altura da árvore, no pior dos cenários.

Desafio: Verificar se a árvore fornecida é uma BST

Dada uma árvore binária, deve verificar se ela é uma árvore binária de pesquisa.

Entrada

A entrada contém inteiros separados por espaço, representando os valores dos nós da árvore binária. A ordem dos valores é dada percorrendo sempre a subárvore da esquerda para a direita. Um valor de 0 significa que o nó não existe. É garantido que a árvore binária de entrada é válida e que os valores são exclusivos.

Saída

O programa deve imprimir Yes se a árvore binária for uma árvore binária de pesquisa, ou No caso contrário.

Exemplos

Entrada
Saída
1 2 3 8 5 0 0 0 0 5 8 0 0 0 0
No
5 2 7 1 4 0 0 3 0 0 0 6 8 0 0 0 0
Yes

Explicação

Exemplo 1: Apesar de todos os nós-filho à direita serem maiores do que os nós-pai, nem todos os nós-filho à esquerda são menores do que o nó-pai.
notion image
Exemplo 2: É uma árvore binária de pesquisa, pois todos os nós-filho à esquerda têm valores menores do que o nó-pai, enquanto todos os nós-filho à direita têm um valor maior do que o nó-pai.
notion image
 
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue