Árvores binárias de busca
Uma árvore binária de busca balanceada com 1023 chaves acha qualquer uma delas em no máximo 10 comparações; construída a partir de uma entrada ordenada, as mesmas chaves podem levar 1023.
Busca binária embutida na forma
A busca binária num array ordenado acha uma chave em cerca de log₂ n verificações, mas inserir num array ordenado move valores. Uma tabela hash insere rápido, mas esquece a ordem: ela não consegue dizer com facilidade qual é a menor chave ou a próxima chave depois de 40. Uma árvore binária de busca (BST) tenta ter as duas coisas. Ela é feita de nós, como uma lista encadeada, mas cada nó tem dois ponteiros, left e right. O nó do topo é a raiz; um nó sem filhos é uma folha.
Uma regra faz dela uma árvore de busca: para todo nó, todas as chaves da subárvore esquerda são menores e todas as chaves da subárvore direita são maiores. Para buscar uma chave, comece na raiz e compare. Igual quer dizer encontrada. Menor quer dizer ir para a esquerda, maior quer dizer ir para a direita. Cada comparação descarta uma subárvore inteira, como a busca binária descarta metade da lista. Buscar 60 na árvore 50, 30, 70, 20, 40, 60, 80 compara com 50, depois 70, depois 60: 3 comparações.
Inserir segue o mesmo caminho. Vá para a esquerda ou para a direita até o ponteiro de que você precisa estar vazio e pendure o nó novo ali. Inserir 45 compara com 50 (vai para a esquerda), 30 (vai para a direita) e 40 (vai para a direita), e 40 não tem filho direito, então 45 vira esse filho. Apagar um nó que não é folha exige mais uma ideia: as notas do MIT trocam o item dele com a chave seguinte ou anterior na ordem e apagam a partir dali. A regra de contagem do laboratório é uma comparação por nó do caminho.
Arraste para girar. Role ou faça pinça para dar zoom.
A altura é tudo
Quantas comparações uma busca pode levar? No máximo uma por nível, então o custo depende da altura da árvore, o número de arestas no caminho mais longo da raiz até uma folha. As notas do MIT dizem assim: as operações de árvore rodam em tempo O(h). A árvore 50, 30, 70, 20, 40, 60, 80 tem altura 2, então nenhuma busca precisa de mais de 3 comparações. Uma árvore perfeitamente balanceada com 1023 nós tem altura 9 e precisa de no máximo 10.
Mas a forma depende da ordem de inserção. Insira 10, 20, 30, 40, 50, 60, 70 em ordem crescente e cada chave é maior que tudo o que veio antes, então cada nó novo vai para a direita do último. A árvore vira uma cadeia de altura 6, e buscar 70 leva 7 comparações: uma lista encadeada com ponteiros extras. Com 1023 chaves ordenadas, a pior busca leva 1023 comparações em vez de 10.
As árvores balanceadas resolvem isso remodelando-se depois de cada inserção ou remoção. O primeiro esquema foi a árvore AVL, de Georgy Adelson-Velsky e Evgenii Landis, em 1962, que a aula 7 do MIT trata. Ela mantém, em todo nó, as alturas das duas subárvores com diferença de no máximo 1, e conserta qualquer quebra com pequenos movimentos locais chamados rotações. Isso mantém a altura em O(log n), então busca, inserção e remoção continuam O(log n), seja qual for a ordem de chegada das chaves.
Chaves em ordem de graça
Uma BST guarda mais do que a presença das chaves. Visite a subárvore esquerda, depois o nó, depois a subárvore direita, de forma recursiva, e as chaves saem em ordem crescente. Esse percurso em ordem (o MIT chama de ordem de travessia) é como uma BST responde a "menor chave", "maior chave" e "próxima chave depois de 40", as operações de ordem da interface Set do MIT que uma tabela hash não faz rápido.
| Raiz e folha | A raiz é o nó do topo; uma folha não tem filhos. |
| Propriedade da BST | As chaves da subárvore esquerda são menores e as da subárvore direita são maiores, em todo nó. |
| Altura | Arestas no caminho mais longo da raiz até uma folha. Uma busca leva no máximo altura + 1 comparações. |
| Árvore AVL | Uma BST balanceada (1962): as alturas das subárvores diferem no máximo em 1, consertadas com rotações. |
| Percurso em ordem | Esquerda, nó, direita: lista as chaves em ordem crescente. |
- Qual afirmação é a propriedade da árvore binária de busca?
- Todo nó tem exatamente dois filhos
- As chaves da subárvore esquerda são menores e as da direita são maiores, em todo nó
- As chaves ficam guardadas na ordem de inserção
- A raiz é a menor chave
- Árvore construída com 50, 30, 70, 20, 40, 60, 80. Quantas comparações leva buscar o 60?
- Mesma árvore: buscar o 45, que não está lá, leva quantas comparações?
- Insira 45 nessa árvore. Onde ele fica?
- Filho esquerdo de 50
- Filho direito de 40
- Filho esquerdo de 60
- Filho direito de 30
- Qual é a altura da árvore 50, 30, 70, 20, 40, 60, 80?
- Insira 10, 20, 30, 40, 50, 60, 70 nessa ordem. Quantas comparações leva buscar o 70?
- Uma BST perfeitamente balanceada tem 1023 nós (altura 9). Qual é o maior número de comparações que uma busca pode levar?
- Ponha as chaves da árvore 50, 30, 70, 20, 40 na ordem em que um percurso em ordem as visita.
- Quem propôs o primeiro esquema de árvore balanceada, e quando?
- Adelson-Velsky e Landis, 1962
- Luhn, 1953
- Bauer e Samelson, 1957
- Knuth, 1998
- Qual pergunta uma BST responde rápido, mas uma tabela hash simples não?
- O 40 está guardado?
- Qual é a próxima chave depois de 40?
- Quantos baldes existem?
- Quanto é 40 mod 7?
- Numa BST, chaves menores vão para a esquerda e maiores para a direita, em todo nó.
- Busca e inserção seguem um caminho só: no máximo altura + 1 comparações.
- Entrada ordenada forma uma cadeia (7 chaves, altura 6); árvores balanceadas como a AVL (1962) mantêm a altura em O(log n).
- Um percurso em ordem lista as chaves em ordem crescente.
Fontes deste curso (11)
- MIT OpenCourseWare 6.006 Introduction to Algorithms, Spring 2020 (Demaine, Ku, Solomon)
- lecture notes 2 Data Structures (interface vs data structure, Sequence and Set interfaces, stack = insert_last/delete_last, queue = insert_last/delete_first, array, linked list, dynamic array, amortized Θ(1) append)
- 4 Hashing (chaining, pigeonhole collisions, chain length n/m)
- 6 Binary Trees Part 1 (height, traversal order, O(h) operations) and 7 Binary Trees Part 2: AVL (Adelson-Velsky and Landis, 1962) at ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/pages/lecture-notes
- MDN Web Docs, Array.prototype.shift (shifts all values left by 1)
- Array.prototype.unshift, Map (insertion order, Map vs Object, spec requires sublinear average access) and Set (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)
- ECMAScript 2025 Language Specification (tc39.es/ecma262)
- 24.1 Map Objects and 24.2 Set Objects ("must be implemented using either hash tables or other mechanisms that, on average, provide access times that are sublinear on the number of elements")
- Array.prototype.shift steps (Repeat, while k < len: move element k to k - 1)
- D. E. Knuth, The Art of Computer Programming vol. 3 (2nd ed. 1998) section 6.4 History (H. P. Luhn, IBM internal memorandum January 1953, hashing with chaining; digit pairs added mod 10, 31415926 -> 4548) via gwern.net copy, and IEEE Spectrum, "Hans Peter Luhn and the Birth of the Hashing Algorithm" (2018)
- "A brief history of the stack", SIGCIS (sigcis.org/files/A brief history.pdf: Bauer and Samelson applied for the patent in 1957, US 3,047,228 granted July 31, 1962; IPL list processing by Newell, Simon and Shaw at RAND 1956) and Wikipedia, Information Processing Language (Newell, Shaw, Simon, RAND and Carnegie Institute of Technology, about 1956).
Data de verificação: 2026-10-18