9
GUIÃO DAS AULAS PRÁTICAS DE ALGORITMOS E COMPLEXIDADE
AULA 9
O Tipo Abstracto de Dados Árvore Binária de Pesquisa (ABP) é constituído pelo ficheiro de interface
abp.h e pelo ficheiro de implementação abp.c e implementa a manipulação de árvores binárias de
pesquisa, com capacidade para armazenar números inteiros. O TAD tem capacidade de múltipla
instanciação e usa um controlo centralizado de erros. Para testar o TAD é fornecido o programa tabp.c
e a makefile mkabp. Comece por testar convenientemente toda funcionalidade do TAD, usando para
esse efeito os ficheiros de árvores disponibilizados. Também é fornecido o programa irabp.c que
simula a inserção e a remoção de elementos na árvore, fazendo a sua visualização hierárquica na
horizontal, após cada operação. Simule o programa para as sequências de elementos dos ficheiros.
Acrescente ao Tipo Abstracto de Dados Árvore Binária de Pesquisa a seguinte funcionalidade:
 Uma função iterativa para obter um ponteiro para o nó do menor elemento armazenado na árvore.
A função deve ter o seguinte protótipo:
PtABP ABPMinNode (PtABP pabp);
 Uma função recursiva para obter um ponteiro para o nó do maior elemento armazenado na árvore.
A função deve ter o seguinte protótipo:
PtABP ABPMaxNode (PtABP pabp);
 Uma função para obter o elemento armazenado na árvore, dado um ponteiro para o seu nó. A
função deve ter o seguinte protótipo:
int ABPElement (PtABP pnode);
 Uma função recursiva para determinar a soma dos elementos armazenados na árvore. A função
deve ter o seguinte protótipo:
int ABPTotalSum (PtABP pabp);
 Uma função iterativa para determinar o número de elementos múltiplos de 7 armazenados na
árvore. A função deve ter o seguinte protótipo:
unsigned int ABPMult7Count (PtABP pabp);
 Uma função recursiva para determinar o número de elementos pares armazenados na árvore. A
função deve ter o seguinte protótipo:
unsigned int ABPEvenCount (PtABP pabp);
 Uma função iterativa para determinar a soma dos elementos ímpares armazenados na árvore. A
função deve ter o seguinte protótipo:
int ABPOddSum (PtABP pabp);
 Uma função para determinar a soma dos elementos armazenados na árvore, com número de ordem
ímpar. Ou seja, a soma do primeiro, terceiro, quinto, sétimo, etc. menores números inteiros
armazenados na árvore. A função deve ter o seguinte protótipo:
int ABPOddOrderSum (PtABP pabp);
 Uma função para determinar se duas árvores são iguais. Entenda-se por árvores iguais, duas árvores
que armazenam os mesmos elementos, independentemente da sua organização interna. A função
deve ter o seguinte protótipo:
int ABPEquals (PtABP pabp1, PtABP pabp2);
10
GUIÃO DAS AULAS PRÁTICAS DE ALGORITMOS E COMPLEXIDADE
Escreva um programa, chamado por exemplo testeabp.c que permita testar estas operações. O
programa constrói uma árvore binária de pesquisa a partir de um ficheiro, cujo nome é passado como
argumento na linha de comando e depois apresenta no monitor, o número de nós e a altura da árvore
criada. De seguida, o programa indica também: o valor do menor elemento armazenado na árvore; o
valor do maior elemento armazenado na árvore; a soma dos elementos da árvore; a contagem dos
números múltiplos de 7 da árvore; o número de números pares da árvore; a soma dos elementos
ímpares da árvore; a soma dos elementos com número de ordem ímpar da árvore. Finalmente, o
programa constrói uma segunda árvore binária de pesquisa, também a partir de um ficheiro, e depois
indica no monitor se as duas árvores são ou não iguais.
Download

Guião