Skip to content

Python BinaryTree

Latest

Choose a tag to compare

@Pedroltz Pedroltz released this 11 Nov 14:46

Descrição do Programa em Python - Árvore AVL

Introdução

Este programa implementa uma Árvore AVL em Python, oferecendo uma interface interativa para manipulação de estruturas de dados balanceadas. As árvores AVL são árvores binárias de busca autobalanceadas que mantêm o fator de balanceamento entre os nós, garantindo operações eficientes de busca, inserção e remoção com complexidade de tempo O(log n).

Funcionalidades

  • Criação de Árvore Vazia: Permite iniciar uma nova árvore AVL sem elementos.
  • Inserção de Elementos: Adiciona elementos individuais à árvore, mantendo-a balanceada através de rotações necessárias.
  • Remoção de Elementos: Remove elementos especificados da árvore, ajustando o balanceamento conforme necessário.
  • Travessias da Árvore:
    • Pré-Ordem: Visita o nó atual antes dos nós filhos.
    • Pós-Ordem: Visita os nós filhos antes do nó atual.
    • Em Ordem (In-Order): Visita os nós em ordem crescente de valor.
  • Visualização Gráfica: Exibe a estrutura da árvore graficamente utilizando a biblioteca matplotlib.
  • Busca de Elementos: Pesquisa por um elemento específico dentro da árvore.
  • Edição de Elementos: Permite alterar o valor de um nó existente na árvore.
  • Balanceamento Automático: A árvore AVL se autobalanceia após operações de inserção e remoção.
  • Inserção de Números Aleatórios: Insere entre 8 e 15 números aleatórios na árvore para fins de demonstração ou teste.

Como Utilizar

1. Requisitos Pré-existentes

  • Python 3.x instalado no sistema.

  • Biblioteca matplotlib instalada:

    pip install matplotlib

2. Execução do Programa

Execute o script binaryTree.py através do terminal ou prompt de comando:

 ```bash
 python binaryTree.py
 ```

3. Interação com o Menu

O programa apresenta um menu interativo com as seguintes opções:

  1. Criar árvore vazia
  2. Inserir um elemento
  3. Excluir um elemento
  4. Exibir a árvore em pré-ordem
  5. Exibir a árvore em pós-ordem
  6. Exibir a árvore em ordem simétrica (em-ordem)
  7. Visualizar a árvore
  8. Buscar um elemento
  9. Editar um elemento
  10. Balancear a árvore
  11. Inserir números aleatórios na árvore
  12. Sair

Selecione a opção desejada digitando o número correspondente e pressionando Enter.

4. Operações Comuns

  • Inserir Elemento: Escolha a opção 2 e insira o número que deseja adicionar à árvore.
  • Remover Elemento: Escolha a opção 3 e informe o número que deseja remover.
  • Visualizar Árvore: Use a opção 7 para ver a representação gráfica da árvore.
  • Inserir Números Aleatórios: Utilize a opção 11 para popular a árvore com valores aleatórios.

Detalhes Técnicos

Estrutura do Nó (No)

Cada nó possui:

  • dado: Valor armazenado no nó.
  • esquerda: Referência para o filho à esquerda.
  • direita: Referência para o filho à direita.
  • altura: Altura do nó para fins de balanceamento.

Balanceamento da Árvore

  • Utiliza rotações simples e duplas (rotação à esquerda, à direita, esquerda-direita e direita-esquerda) para manter o fator de balanceamento dentro de -1 e 1.
  • O balanceamento é automático durante as operações de inserção e remoção.

Visualização Gráfica

  • Implementada através da biblioteca matplotlib.
  • Representa os nós como caixas com valores e linhas conectando os nós pai e filhos.

Aplicações e Benefícios

  • Eficiência: Operações de busca, inserção e remoção com complexidade O(log n).
  • Educação: Ideal para fins educacionais, auxiliando na compreensão de árvores binárias e balanceamento AVL.
  • Flexibilidade: Pode ser adaptado ou expandido para incluir funcionalidades adicionais ou integrar com outros sistemas.

Considerações Finais

  • Tratamento de Erros: O programa inclui verificações básicas, mas presume que o usuário fornecerá entradas válidas.
  • Valores Duplicados: Não são permitidos na árvore AVL para manter a propriedade de unicidade dos elementos.
  • Compatibilidade: Desenvolvido para ser executado em ambientes Windows, Linux e macOS com Python 3.x instalado.