BSTs: operações adicionais

Além das operações básicas put() e get(), algumas outras operações em TSs podem ser úteis, especialmente se as chaves forem comparáveis.  Esta página trata da implementação dessas operações adicionais em BSTs (árvores binárias de busca).

Resumo:

Pré-requisitos:

Mínimo e máximo

Exercícios 1

  1. O anexo desta página mostra várias maneiras alternativas de escrever o método min(). Discuta e critique cada uma delas.
  2. Implemente o método max() na classe BST.

Piso e teto

Exercícios 2

  1. Critique a seguinte maneira de definir o piso: piso de uma chave k é a maior chave da BST, menor que ou igual a k.
  2. Quanto é floor(min())? Quanto é floor(max())?
  3. Defina teto (ceiling) de um objeto k em uma BST. Implemente código para calcular o teto de um objeto.
  4. Quanto é ceiling(min())? Quanto é ceiling(max())?
  5. Quantos nós visita (ou seja, quantas comparações faz) cada execução de max() no pior caso?  Mesma pergunta para ceiling().

Remoção de um nó em uma BST

Exercícios 3

  1. Implemente o método deleteMax() da classe BST.
  2. Quantos nós visita (ou seja, quantas comparações faz) cada execução de delete() no pior caso?
  3. (SW 3.2.17)  Desenhe a sequência de BSTs que resulta quando você remove as chaves da BST do Exercício SW 3.2.1, uma a uma, na mesma ordem em que as chaves foram inseridas.
  4. (SW 3.2.18)  Desenhe a sequência de BSTs que resulta quando você remove as chaves da BST do Exercício SW 3.2.1, uma a uma, em ordem alfabética.
  5. (SW 3.2.30) Reconstrução de BSTs. Suponha dada uma lista de todos os nós de uma BST, em pré-ordem. Projete um algoritmo que reconstrua a BST a partir dessa lista.