MAC0122 - Lista 6 - Árvores binárias e árvores binárias de busca
- Escreva uma função monta-árvore que recebe uma
expressão aritmética com operadores +, -, * e /
e operandos identificados por uma letra cada um, e devolve uma árvore binária
que representa essa expressão, conforme o exemplo mostrado em aula.
- Escreva uma função calcula que recebe a árvore que você
montou no exercício 1 e devolve o valor da expressão nela guardada,
supondo que você tem à sua disposição uma rotina valor que,
dada uma letra, devolve o valor associado àquela letra na expressão.
Quanto tempo sua função consome em função do número de nós da árvore?
- Escreva uma função posfixa que recebe a árvore que você
montou no exercício 1 e imprime a notação posfixa da expressão nela armazenada.
Quanto tempo sua função consome em função do número de nós da árvore?
- Escreva uma versão não-recursiva da função in-ordem.
- Escreva uma função numNos que recebe uma árvore r
e devolve o número de nós que há na árvore r.
- Escreva uma função recursiva máximo que recebe uma árvore r
não-vazia e devolve um apontador para o nó com conteúdo máximo em r.
- Escreva uma função espelha que recebe uma árvore r
e devolve a árvore espelhada, composta pelos mesmo nós que r.
- Escreva uma função copia que recebe uma árvore r
e devolve uma cópia da árvore r.
- Escreva uma função libera que recebe uma árvore r
e libera todos os nós da árvore r.
- Escreva uma função predecessor que recebe o apontador q
para um nó de um ABB e devolve um apontador para o nó que precede q
na árvore (e NULL caso q seja o mínimo da ABB).
- Escreva uma função nível que recebe uma ABB r e um
elemento x que aparece na árvore r, e devolve o nível do
nó que contém x em r. Escreva uma versão recursiva e uma
não-recursiva desta função. Quanto tempo cada uma das versões consome?
- Qual é a diferença entre a propriedade de uma árvore binária de
busca (ABB) e um heap? Dado um heap com n elementos,
é possível imprimir os valores nele contidos em ordem crescente em
tempo O(n)? Explique como ou porque não. Dada uma ABB com n
elementos, é possível imprimir os valores nela contidos em ordem
crescente em tempo O(n)? Explique como ou porque não.
- O Prof. Xis acha que descobriu uma propriedade muito interessante de ABBs.
Suponha que a busca por um elemento x em uma ABB termina em uma folha.
Considere três conjuntos: o conjunto A com os valores da árvore à
esquerda do caminho percorrido na busca, o conjunto B com os valores
deste caminho, e o conjunto C, com os valores à direita deste caminho.
O Prof. Xis afirma que quaisquer três valores a em A, b
em B e c em C satisfazem a <= b <= c.
Dê um contra-exemplo o menor possível para a afirmação do Prof. Xis.
- Podemos ordenar um conjunto de n números primeiramente construindo
uma ABB contendo estes números e então imprimindo o conteúdo da árvore em ordem
crescente. Qual é o tempo de execução para este algoritmo de ordenação no pior
e no melhor caso? Explique sua resposta.
- Escreva a função remoção, que recebe o apontador p para um
nó de uma ABB e remove o conteúdo do nó apontado por p da ABB, deixando-a
uma ABB após a operação.