https://github.com/julianazambon/avltree
Project developed in the Algorithms and Data Structures 3 course. The goal is to implement the routines for manipulating an AVL tree.
https://github.com/julianazambon/avltree
avl-tree-implementations binary-tree
Last synced: 10 months ago
JSON representation
Project developed in the Algorithms and Data Structures 3 course. The goal is to implement the routines for manipulating an AVL tree.
- Host: GitHub
- URL: https://github.com/julianazambon/avltree
- Owner: JulianaZambon
- Created: 2023-09-15T15:19:47.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-10-09T19:55:36.000Z (over 2 years ago)
- Last Synced: 2025-03-14T10:09:14.878Z (about 1 year ago)
- Topics: avl-tree-implementations, binary-tree
- Language: C
- Homepage: https://www.inf.ufpr.br/andre/Disciplinas/CI1057-2023-2/trab1.html
- Size: 68.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Algoritmos e Estrutura de Dados III
## Trabalho Prático 1: Implementação de Árvore AVL
Este trabalho prático foi desenvolvido para a disciplina CI1057 - Algoritmos e Estruturas de Dados 3 do Departamento de Informática da UFPR.
O objetivo é implementar as rotinas de manipulação de uma árvore AVL.
Equipe:
- Juliana Zambon (jz22), GRR20224168
- Millena Suiani Costa (msc22), GRR20221243
### Estruturas de Dados da Árvore AVL
A implementação da árvore AVL utilizou as seguintes estruturas definidas na biblioteca avl-tree.h :
#### Struct Árvore AVL
Contém um ponteiro para a raiz da árvore.
```c
typedef struct arvore {
nodo *raiz;
} arvore;
```
#### Struct Nodos da Árvore
Contém três ponteiros para nós, sendo eles o pai, o filho esquerdo e o filho direito. Além de
uma chave e a altura.
```c
typedef struct nodo {
int chave;
int altura;
struct nodo *pai;
struct nodo *filhoEsq;
struct nodo *filhoDir;
} nodo;
```
### Bibliotecas desenvolvidas no Projeto
A biblioteca desenvolvida para o trabalho foi a avl-tree.h, que define as structs mencionadas anteriormente.
Também estão definidas as seguintes funções:
- `arvore *inicializaArvore();`
- Inicializa uma árvore vazia.
- `nodo *inicializaNodo(int valor);`
- Inicializa um nodo vazio.
- `int calculaMaximo(int a, int b);`
- Calcula o máximo de dois números.
- `nodo *rotacionaArvoreEsquerda(arvore *avl);`
- É chamada pela função verificaBalancoArvore caso a árvore AVL esteja
desbalanceada e precise de rotações à esquerda para ser balanceada.
- `nodo *rotacionaArvoreDireita(arvore *avl);`
- É chamada pela função verificaBalancoArvore caso a árvore AVL esteja
desbalanceada e precise de rotações à direita para ser balanceada.
- `nodo *verificaBalancoArvore(arvore *avl);`
- Verifica se a árvore está balanceada e chama a função rotacionaArvore
caso seja necessário rotacioná-la para balanço.
- `arvore *insereNodo(arvore *avl, nodo *novo);`
- Insere um nodo específico na árvore.
- `int alturaNodo(nodo *nodo);`
- Calcula a altura de um nó e a retorna.
- `arvore *removeNodo(arvore *avl, int chave);`
- Verifica se um nodo está, ou não, presente em
uma árvore. Caso esteja, o remove.
- `int buscaNodo(arvore *avl, int chave);`
- Verifica se um nodo está, ou não, presente na árvore. Caso esteja,
retorna 1, caso não esteja retorna 0.
- `void imprimeArvore(arvore *avl);`
- Imprime recursivamente a estrutura de uma árvore.
- `void destroiArvore(arvore *avl);`
- Libera a memória alocada para uma árvore.