Árvore binária de busca em Python
Uma árvore binária de busca guarda os valores menores na subárvore esquerda e os maiores na direita, então cada comparação descarta metade da árvore restante.
O que é Árvore binária de busca em Python?
Uma árvore binária de busca guarda os valores menores na subárvore esquerda e os maiores na direita, então cada comparação descarta metade da árvore restante.
Construa uma árvore binária de busca em Python: insira valores, procure-os e liste-os em ordem.
Quando usar?
- Entender algoritmos e estruturas de dados.
- Observar cada etapa e tratar casos de borda.
- Comparar tempo de execução e memória.
Veja como funciona
Insira valores para ver onde eles ficam, procure um valor para seguir seu caminho e rode um percurso para ver a ordem de visita.
Código de exemplo
class Node:
def __init__(self, value):
self.value = value
self.left = None # smaller values go left
self.right = None # larger values go right
def insert(node, value):
if node is None:
return Node(value)
if value < node.value:
node.left = insert(node.left, value)
elif value > node.value:
node.right = insert(node.right, value)
return node
def contains(node, value):
# Each comparison discards one whole subtree.
while node is not None:
if value == node.value:
return True
node = node.left if value < node.value else node.right
return False
def inorder(node):
# Left subtree, node, right subtree: visits values in sorted order.
if node is None:
return []
return inorder(node.left) + [node.value] + inorder(node.right)
def height(node):
if node is None:
return 0
return 1 + max(height(node.left), height(node.right))
root = None
for value in [50, 30, 70, 20, 40, 60, 80]:
root = insert(root, value)
print("inorder:", inorder(root))
print("contains 60:", contains(root, 60))
print("contains 65:", contains(root, 65))
print("height:", height(root))
Saída esperada
inorder: [20, 30, 40, 50, 60, 70, 80]
contains 60: True
contains 65: False
height: 3
Como funciona
insert() desce a partir da raiz e encaixa o valor no lugar certo. contains() segue um único caminho, o que leva O(log n) passos numa árvore balanceada. Um percurso inorder visita esquerda, nó, direita, então os valores saem ordenados.
Altere os valores e execute o programa no compilador Python online CodeUtility sem instalar Python.
Exercícios práticos
Altere as entradas e teste casos de borda antes de usar conjuntos de dados maiores.
- Teste entrada vazia, um elemento e duplicados.
- Mostre o estado após cada etapa.
- Compare o desempenho com outra solução.
Pratique com um desafio
Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.
- Diâmetro da Árvore Uma árvore é um grafo não direcionado, conexo e sem ciclos. Médio
- Tamanhos de pastas com Composite Calcule o tamanho total de cada pasta em uma árvore onde pastas contêm arquivos e outras pastas. Médio