🚀 Capítulo 12: Árvores Binárias de Busca (BST) (Tema: Stranger Things)
NOTE
Este capítulo utiliza a temática de Stranger Things para explicar as Árvores Binárias de Busca. Para encontrar o portal para o Mundo Invertido, você precisa seguir a regra: números menores para a esquerda, maiores para a direita!
1. 🎯 Objetivo da Aula
Compreender o conceito de Árvore Binária de Busca (Binary Search Tree - BST) e a regra fundamental de ordenação que permite buscas extremamente rápidas.
2. 🏢 O Cenário Prático (Seu Desafio)
Dustin está tentando rastrear portais interdimensionais em Hawkins. Cada portal tem uma frequência numérica.
- Para organizar os dados e não precisar buscar portal por portal (Busca Linear), ele decide usar uma Árvore Binária de Busca.
- A regra é simples: Ele começa no portal central (Raiz). Se o novo portal tiver frequência menor, vai para o ramo da esquerda. Se for maior, vai para o ramo da direita.
Seu desafio é ajudar o Dustin a inserir novas frequências nessa árvore e encontrar o portal certo para resgatar o Will!
3. 🧠 Fundamentos: A Teoria Traduzida
Uma Árvore Binária de Busca é uma árvore onde cada nó tem, no máximo, dois filhos (Esquerdo e Direito) e segue uma regra rígida de organização:
📜 A Regra de Ouro da BST:
Para qualquer nó da árvore:
- Todos os valores na sua subárvore esquerda devem ser MENORES que o valor do nó.
- Todos os valores na sua subárvore direita devem ser MAIORES que o valor do nó.
⚡ Por que isso é rápido?
Porque a cada comparação você elimina metade da árvore! Se você procura o número 30 e a raiz é 50, você já sabe que o 30 só pode estar na esquerda. Você nem precisa olhar o lado direito. Isso dá um tempo de busca de .
4. 📖 Exemplo Guiado: Construindo a Árvore
Vamos inserir as frequências: 50, 30, 70, 20, 40
- 50 entra primeiro (Vira a Raiz).
- 30 é menor que 50 → Vai para a Esquerda.
- 70 é maior que 50 → Vai para a Direita.
- 20 é menor que 50 (esquerda), menor que 30 → Esquerda do 30.
- 40 é menor que 50 (esquerda), maior que 30 → Direita do 30.
flowchart TD A["50"] --> B["30"] A --> C["70"] B --> D["20"] B --> E["40"] style A fill:#f9f,stroke:#333,stroke-width:2px
5. 🛠️ Prática Obrigatória 1: Inserindo Elementos
Com base na árvore do exemplo guiado, onde ficariam os seguintes elementos se fossem inseridos agora?
- O número 60.
- O número 80.
- O número 10.
6. 🛠️ Prática Obrigatória 2: Buscando o Portal
Imagine que você está procurando o número 40 na árvore acima.
- Qual é o primeiro nó que você compara?
- Para qual lado você vai em seguida?
- Quantas comparações você fez no total até achar o 40?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 12 Estruturas de Dados) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_09_estruturas_de_dados/
├── capitulos/
│ ├── capitulo_12_bst.md
│ └── codigos/
│ └── cap12/
│ └── bst_portais.js9. 💡 Checkpoint de Lógica
O que acontece se tentarmos inserir um número que já existe na árvore? As árvores BST padrão geralmente não permitem duplicatas (ou colocam na direita/esquerda como padrão fixo).
10. 🔥 Desafio de Fixação
Pesquise o que acontece com a velocidade de busca se inserirmos os números já ordenados (ex: 10, 20, 30, 40, 50) em uma BST. (Dica: Ela vai parecer uma árvore ou uma lista ligada?).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- 60: Menor que 70 → Esquerda do 70.
- 80: Maior que 70 → Direita do 70.
- 10: Menor que 50, menor que 30, menor que 20 → Esquerda do 20.