edubun
Português

Á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.

Carregando

Arraste para girar. Role ou faça pinça para dar zoom.

Uma árvore binária de busca. Escolha uma chave e insira ou busque; o caminho se acende e o contador mostra as comparações. Mude a árvore inicial para "entrada ordenada" para ver as mesmas sete chaves formarem uma cadeia comprida.

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 folhaA raiz é o nó do topo; uma folha não tem filhos.
Propriedade da BSTAs chaves da subárvore esquerda são menores e as da subárvore direita são maiores, em todo nó.
AlturaArestas no caminho mais longo da raiz até uma folha. Uma busca leva no máximo altura + 1 comparações.
Árvore AVLUma BST balanceada (1962): as alturas das subárvores diferem no máximo em 1, consertadas com rotações.
Percurso em ordemEsquerda, nó, direita: lista as chaves em ordem crescente.
  1. 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
  2. Árvore construída com 50, 30, 70, 20, 40, 60, 80. Quantas comparações leva buscar o 60?
  3. Mesma árvore: buscar o 45, que não está lá, leva quantas comparações?
  4. Insira 45 nessa árvore. Onde ele fica?
    • Filho esquerdo de 50
    • Filho direito de 40
    • Filho esquerdo de 60
    • Filho direito de 30
  5. Qual é a altura da árvore 50, 30, 70, 20, 40, 60, 80?
  6. Insira 10, 20, 30, 40, 50, 60, 70 nessa ordem. Quantas comparações leva buscar o 70?
  7. Uma BST perfeitamente balanceada tem 1023 nós (altura 9). Qual é o maior número de comparações que uma busca pode levar?
  8. Ponha as chaves da árvore 50, 30, 70, 20, 40 na ordem em que um percurso em ordem as visita.
  9. Quem propôs o primeiro esquema de árvore balanceada, e quando?
    • Adelson-Velsky e Landis, 1962
    • Luhn, 1953
    • Bauer e Samelson, 1957
    • Knuth, 1998
  10. 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?
Pontos-chave
  • 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