Estruturas de Dados 2019/2020 (CC1007) - DCC/FCUP

Aula Prática #11 - Árvores Binárias
(semana de 11/05 a 15/05)


Conteúdos das teóricas

Nesta aula iremos abordar conceitos de árvores binárias. Será por isso conveniente ver o que foi falado nas teóricas:


Exercício 1) Compreender Árvores Binárias

  1. Um primeira árvore binária.
    Uma maneira de descrever uma árvore é usar uma das seguintes representações:

    Considere a árvore binária da figura seguinte:


    Nas 4 representações anteriores, a árvore da figura seria descrita do seguinte modo:

  2. Percebendo as várias ordens de visita aos nós Para garantir que percebeu, procure agora escrever no seu caderno as 4 representações como descritas para a seguinte árvore (preorder, inorder, postorder, em largura):



Exercício 2) Introdução à implementação de Árvores Binárias

  1. Código de Árvores Binárias.
    Faça download do código dado nas teóricas e compile-o:

    Espreite o ficheiro BTNode.java para ver como um nó é descrito por três atributos: value, left e right. Veja também no ficheiro BTree.java como o único atributo de uma árvore é a sua raíz (root)

  2. Um primeiro teste.
    Crie um ficheiro input.txt contendo a seguinte linha: 5 1 8 N N 6 N N 7 2 N N N. Esta é a representação preorder da árvore binária da figura seguinte (onde N representa explicitamente um nó nulo).


    (as duas representações da imagems referem-se à mesma árvore)

    Agora execute a classe de teste das árvores dando como input o ficheiro que criou:

    $ java TestBTree < input.txt

    Procure acompanhar cada uma das linhas de código de TestBTree.java e o seu efeito, usando os slides para cimentar o seu vocabulário de árvores. Espreite também Para os métodos numberNodes, depth e contains

  3. Um segundo teste.
    Crie um ficheiro input2.txt contendo a descrição preorder da árvore binária de 7 nós descrita na figura da pergunta 1.2. Execute novamente TestBTree, agora com este novo input, e verifique se os resultados são os esperados.

Exercício 3) Vários exercícios de árvores

  1. Contando o número de folhas.
    O método numberNodes conta o número de nós. Para garantir que percebeu como funciona, vamos agora fazer um exercício parecido.
    Resolva e submeta o problema [ED204] Contando folhas.
  2. Verificando se uma árvore é "estritamente binária".
    Resolva e submeta o problema [ED205] Árvores estritamente binárias.
  3. Caminhos numa árvore
    Resolva e submeta o problema [ED206] Percorrendo caminhos.
  4. Número de nós a uma dada profundidade
    Resolva e submeta o problema [ED207] Nós profundos.

Exercícios extra para consolidação de conhecimentos

  1. Aqui ficam mais alguns problemas envolvendo árvores para resolver no Mooshak:
  2. Mais alguns exercícios possíveis:

Exercício de Desafio

O exercício de desafio desta semana envolve obviamente... árvores!

Não vou dizer mais para não tirar a piada a fazerem o problema, mas se precisarem de dicas, avisem-me.