Você está na página 1de 48

UNIDADE VIII

Linguagem e Técnicas
de Programação

Prof. Fernando Almeida


Árvore

Árvores são estruturas de dados


multidimensionais que permitem a
representação de hierarquias ou a
representação em vários níveis.
Árvore

 Existe um nó denominado raiz, que pode ramificar-se (ou não) em subárvores, cujas
raízes são ligadas diretamente a essa raiz, e assim sucessivamente.

Uma árvore é composta por um conjunto de nós,


que podem ou não ter ramificações.
Estrutura de uma árvore

 Nós com filhos são


comumente chamados Raiz
de nós internos e nós
que não têm filhos são
chamados de folhas ou
nós externos. Subárvores Subárvores Subárvores Subárvores

Subárvores
Árvores binárias

 Assim, recursivamente, os filhos são pais que têm, no máximo, dois filhos.

Árvore binária é um caso especial de árvore


em que um pai tem, no máximo, dois filhos
(zero, um ou dois).
Exemplo

 As operações são os nós e os números são as folhas.

B C

D E
Conjunto de nós e suas ramificações

Raiz

SAE SAD

Subárvore Esquerda (SAE) Subárvore Direita (SAD)


Ordem das ramificações

 Mesmo tendo duas


informações iguais, uma
árvore que tem uma A A
informação SAE e outra que
tem a mesma informação na
SAD são diferentes.

B B
Percurso em árvores binárias

Há três ordens de leitura principais:


 Percurso em pré-ordem ou prefixo (busca em profundidade).
 Percurso em ordem ou infixo (ordem simétrica).
 Percurso em pós-ordem ou posfixo.
Percurso em pré-ordem ou prefixo (busca em profundidade)

O percurso em pré-ordem faz, recursivamente, a partir da raiz:


 Lê o nó;
 Vai para a SAE (esquerda);
 Vai para a SAD (direita).
5

2 7

1 3 6 8

4
Percurso em pré-ordem ou prefixo (busca em profundidade)

 Percurso: 5 2 1 3 4 7 6 8

2 7

1 3 6 8

4
Percurso em ordem ou infixo (ordem simétrica)

O percurso em ordem faz, recursivamente, a partir da raiz:


 Vai para a SAE (esquerda);
 Lê o nó;
 Vai para a SAD (direita). END
5

END END
2 7

END END
1 3 6 8

END END
END 4
Percurso em ordem ou infixo (ordem simétrica)

 Percurso: 1 2 3 4 5 6 7 8

2 7

1 3 6 8

4
Percurso em pós-ordem ou posfixo

O percurso em ordem faz, recursivamente, a partir da raiz:


 Vai para a SAE (esquerda);
 Vai para a SAD (direita);
 Lê o nó. EDN
5

EDN EDN
2 7

EDN EDN
1 3 6 8

EDN EDN
EDN 4
Percurso em pós-ordem ou posfixo

 Percurso : 1 4 3 2 6 8 7 5

2 7

1 3 6 8

4
Interatividade

A recursividade acontece quando uma função chama a si mesma, mas a cada chamada a
função passa a executar a si desde o início e, na volta, retorna ao ponto em que foi chamada.
Com base na árvore a seguir e tendo o percurso 5 2 1 3 4 7 6 8, trata-se de um percurso em:

a) Pré-ordem.
b) Pós-ordem. 5
c) Ordem.
d) Árvore binária com costura.
e) Nó sempre à direita. 2 7

1 3 6 8

4
Resposta

A recursividade acontece quando uma função chama a si mesma, mas a cada chamada a
função passa a executar a si desde o início e, na volta, retorna ao ponto em que foi chamada.
Com base na árvore a seguir e tendo o percurso 5 2 1 3 4 7 6 8, trata-se de um percurso em:

a) Pré-ordem.
b) Pós-ordem. 5
c) Ordem.
d) Árvore binária com costura.
e) Nó sempre à direita. 2 7

1 3 6 8

4
Árvores binárias de busca

Árvore binária de busca ou árvore binária de


pesquisa é uma estrutura de dados em que todos
os nós da subárvore esquerda possuem valor
inferior ao do nó-raiz e todos os nós da subárvore
direta possuem um valor superior ao do nó-raiz.
Árvores binárias de busca

 A busca por um valor torna-se muito fácil, pois, a partir de simples comparações, podemos
localizá-lo com menos passos.

 Imagine, por exemplo, a sequência de entrada:

50 67 20 13 31 35 80 60 62 2 55 25
Árvores binárias de busca

 Nessa árvore, para ir da raiz até quaisquer um dos nós, são necessários, no máximo, três
“pulos”.

1 50
1 2 3 4 5 6 7 8 9

50 67 20 13 31 35 80 60 62 2 55 25
20 67
Quantidade de passos para localizar o número 2 2

13 31 60 80
3

2 25 35 55 62

Quantidade de passos para localizar o número


2 numa árvore binária de busca
Operação de busca

 Na busca, as operações são realizadas de forma recursiva e a cada movimentação, o novo


nó passa a ser a raiz.

 Se o valor procurado for igual ao da raiz, o valor será retornado.


 Se o valor procurado for menor que o da raiz, busca na SAE.
 Se o valor procurado for maior que o da raiz, busca na SAD.
 Se o nó for folha da árvore, o valor requerido não terá sido encontrado.
Operação de inserção

Na operação de inserção, o novo valor inserido não pode quebrar a estrutura da árvore.
Ao encontrar uma subárvore livre ou uma folha, deve-se obedecer aos seguinte critérios:

 Se a chave a ser inserida for menor que a chave do nó analisado, insere a chave na
subárvore esquerda.
 Se a chave a ser inserida for maior que a chave do nó analisado, insere a chave na
subárvore direita.
 Se a subárvore estiver ocupada, segue a busca.
Operação de inserção

 Inserção do valor na lista, fazemos a


busca até encontrar um nó com a 50
subárvore livre adequada, ou folha.

20 67

13 31 60 80

2 25 35 55 62 88
Interatividade

Uma árvore binária de busca ou árvore binária de pesquisa é uma estrutura de dados em que
todos os nós da subárvore esquerda possuem valor inferior ao do nó-raiz e todos os nós da
subárvore direita possuem um valor superior ao do nó-raiz. Com base neste conceito, é
possível afirmar que:
Interatividade

a) A busca de um valor torna-se mais fácil, pois, a partir de simples comparações, podemos
localizá-lo com menos passos.
b) A busca de um nó com um filho.
c) A busca de um nó com dois filhos.
d) A busca pelo valor do nó a mais à direita da subárvore esquerda.
e) A busca pelo nó-raiz.
Resposta

a) A busca de um valor torna-se mais fácil, pois, a partir de simples comparações, podemos
localizá-lo com menos passos.
b) A busca de um nó com um filho.
c) A busca de um nó com dois filhos.
d) A busca pelo valor do nó a mais à direita da subárvore esquerda.
e) A busca pelo nó-raiz.
Remoção de folha

 A exclusão na folha é a mais simples.


 Basta remover o nó da árvore.
50
Exemplo:
 Remoção do valor 88.

20 67

13 31 60 80

2 25 35 55 62 88
Remoção de folha com um filho

 A remoção de um nó com apenas um filho também é simples.


 Exclusão do nó e o filho sobe para a posição pai.

Exemplo:
 remoção do valor 80, o seu filho, 88, assumirá seu lugar.
50

20 67

13 31 60 80

2 25 35 55 62 88
Remoção de folha com um filho

Outro exemplo:
 Remoção do nó 13.
50

20 67

13 31 60 80

2 25 35 55 62 88
Remoção de folha com dois filhos

 Substituição do valor do nó a ser


retirado pelo nó mais a direita da
subárvore esquerda. 50

20 67

13 31 60 80

2 25 35 55 62 88
Situação atual da árvore:

35

20 67

13 31 60 80

2 25 55 62 88
Remoção de folha com dois filhos

 Substituição do valor do nó a ser


retirado pelo nó mais à esquerda
50
da subárvore direita.

20 67

13 31 60 80

2 25 35 55 62 88
A árvore fica:

55

20 67

13 31 60 80

2 25 35 62 88
Interatividade

Na operação de remoção de folha com dois filhos é correto afirmar:

a) O valor do nó a ser retirado será substituído pelo nó mais à direita da subárvore esquerda.
b) O valor do nó a ser retirado será substituído pelo nó mais à esquerda da subárvore
esquerda.
c) O valor do nó a ser retirado será substituído pelo nó mais à esquerda da subárvore direita.
d) Exclusão do nó principal e o filho sobe para a posição do pai.
e) Remoção de apenas um nó da árvore.
Resposta

Na operação de remoção de folha com dois filhos é correto afirmar:

a) O valor do nó a ser retirado será substituído pelo nó mais à direita da subárvore esquerda.
b) O valor do nó a ser retirado será substituído pelo nó mais à esquerda da subárvore
esquerda.
c) O valor do nó a ser retirado será substituído pelo nó mais à esquerda da subárvore direita.
d) Exclusão do nó principal e o filho sobe para a posição do pai.
e) Remoção de apenas um nó da árvore.
Estrutura de árvores binárias em C

 Assim como nas estruturas unidimensionais,


nas árvores podemos definir um tipo para
representar o nó de uma árvore binária.

 A variável que era chamada de próximo


(estruturas unidimensionais) agora se chama
SAE e SAD, subárvore esquerda e
subárvore direita, que são ponteiros
autorreferenciados.
Inicialização de uma árvore vazia

 Uma árvore é representada pelo endereço nó-raiz.

 Uma árvore vazia deve ser representada pelo valor NULL.


Criação de árvores não vazias

 Operação que cria um nó-raiz, dadas as informações e suas duas subárvores,


à esquerda e à direita.

 Essa função tem como valor de retorno o endereço do nó-raiz criado.


Aspecto da memória
Novo nó com a1 na SAD
Verificar se a árvore é ou não vazia
Impressão em pré-ordem
Impressão em pós-ordem
Impressão em ordem simétrica
Interatividade

Para criar árvores não vazias, temos uma operação que cria um nó-raiz, dadas as informações
e suas duas subárvores, à esquerda e à direita. Analise a função cria() e selecione a alternativa
que melhor descreva a sua assinatura:
Interatividade

a) A função cria( ) recebe por parâmetro um valor inteiro e dois ponteiros sae e sad,
retornando o endereço do nó criado através do ponteiro p.
b) A função cria( ) recebe por parâmetro dois ponteiros para um inteiro c, retornando
o ponteiro p.
c) A função cria( ) recebe por parâmetro dois ponteiros sae e sad, retornando o endereço
do nó criado através do ponteiro p.
d) A função cria recebe por parâmetro um valor inteiro e dois ponteiros sae e sad, retornando
o nó criado através do ponteiro p.
e) Nenhuma alternativa está de acordo com a assinatura da função.
Resposta

a) A função cria( ) recebe por parâmetro um valor inteiro e dois ponteiros sae e sad,
retornando o endereço do nó criado através do ponteiro p.
b) A função cria( ) recebe por parâmetro dois ponteiros para um inteiro c, retornando
o ponteiro p.
c) A função cria( ) recebe por parâmetro dois ponteiros sae e sad, retornando o endereço
do nó criado através do ponteiro p.
d) A função cria recebe por parâmetro um valor inteiro e dois ponteiros sae e sad, retornando
o nó criado através do ponteiro p.
e) Nenhuma alternativa está de acordo com a assinatura da função.
ATÉ A PRÓXIMA!

Você também pode gostar