Árvores e Árvores Binárias Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Post on 17-Apr-2015

109 views 2 download

Transcript of Árvores e Árvores Binárias Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Árvores e Árvores Binárias

Prof. Alexandre Parra Carneiro da Silva

parrasilva@gmail.com

Roteiro Contextualização

Árvores

Árvores Binárias

Roteiro Contextualização

Árvores

Árvores Binárias

Contextualização Importância de estruturas unidimensionais ou

lineares (vetores e listas) é inegável.

Contudo, elas não são adequadas para representar dados que devem ser dispostos de maneira hierárquica.

Por exemplo, diretórios criados em um computador.

Exemplo de estrutura hierárquica

Um exemplo de estrutura de diretório no Windows 2000

Roteiro Contextualização

Árvores

Árvores Binárias

Árvores

Árvore é uma estrutura de dado adequada para representar hierarquias.

Forma mais natural de definirmos uma estrutura de árvore é usando recursividade.

Definições Uma árvore é composta de um conjunto finito de

nós.

Desse conjunto, há um nó r denominado de raiz, que contém zero ou mais sub-árvores, cujas raízes são ligadas diretamente a r.

Esses nós raízes das sub-árvores são ditos filhos do nó pai, r.

Nós com filhos são comumente chamados de nós internos.

Nós que não têm filhos são chamados de nós externos (folhas).

Estrutura de árvores

Exemplos de árvores (1/2)

A

B C D

E F

L

G H I J

M N

A

B C D

raiz da árvore

Quantas sub-árvores existem na árvore acima?Quais são as sub-árvores? Quais nós são as raízes das sub-árvores da árvore acima?Quais nós são considerados nós internos?Quais nós são considerados nós externos (folhas)?

A

Exemplos de Árvores (2/2)

My Documents My Computer

3½ Floppy(A:)

Network

Apostila

Parte I Parte II Parte III

Recycle Bin

Desktop

Local Disk (C:) Local Disk (D:)

Compact Disk (E:)

Removable Disk (F:) Local Disk (I:) Local Disk (J:) Control Panel

Propriedade Fundamental de Árvores

Existe um único caminho da raiz para qualquer nó da árvore.

Portanto, podemos definir a altura de todas as árvores como sendo o comprimento do caminho mais longo da raiz até uma das folhas.

Por definição, a altura de uma árvore que possui somente um elemento é zero.

Exemplo de altura em árvores

A

B C D

E F

L

G H I J

M N

Qual a altura da árvore A1?

árvore A1

My Documents My Computer

3½ Floppy(A:)

Network

Apostila

Parte I Parte II Parte III

Recycle Bin

Desktop

Local Disk (C:) Local Disk (D:)

Compact Disk (E:)

Removable Disk (F:) Local Disk (I:) Local Disk (J:) Control Panel

Qual a altura da árvore A2?

árvore A2

Roteiro

Contextualização

Árvores

Árvores Binárias

Árvores Binárias (AB)

Uma árvore binária é constituída de um conjunto finito de nós.

Cada nó pode ter no máximo dois filhos. De maneira recursiva, podemos definir uma

árvore binária como sendo: uma árvore vazia; ou um nó raiz tendo duas sub-árvores,

identificadas como a sub-árvore da direita (sad) e a sub-árvore da esquerda (sae).

Representação Esquemática de AB

Representação esquemática da definição da estrutura de AB

Exemplo Árvore Binária

8

9 7

1

13 5 11

4 3

2

raiz da árvore

raiz da sae raiz da sad

Notação Textual de Árvore Binária

Exemplo de árvore binária

Árvore vazia é representada por <>, e árvores não vazias por <raiz sae sad>. Com esta notação, a árvore ilustrada acima é representada por:

<a <b<><d<><>>> <c<e<><>><f<><>>> >

Verificando a altura das árvores

1

6 7

3

8 9 10

4 5

2

Qual a altura da árvore binária ao lado ?

Qual a altura da árvore binária ao lado ?

Em qual nível está o nó C?

nível 0

nível 1

nível 2

nível 3

Percursos em Árvores Binárias

Muitas operações em árvores binárias envolvem o percurso de todas as suas sub-árvores, executando alguma ação de tratamento em cada nó.

É comum percorrer uma árvore em uma das seguintes ordens:

Pré-Ordem: tratar raiz, percorrer sae, percorrer sad; Em-Ordem (ordem simétrica): percorrer sae, tratar

raiz, percorrer sad; Pós-Ordem: percorrer sae, percorrer sad, tratar raiz.

Pré-Ordem Imprima os valores

presentes nos nós da árvore ao lado, segundo a condição pré-ordem (tratar raiz, percorrer sae, percorrer sad).

Resultado: 34, 80, 40, 43, 13, 26, 90, 75, 55, 5, 1, 17.

34

55

5

1 17

90

75

26

13

4340

80

Em-Ordem (Ordem Simétrica) Imprima os valores

presentes nos nós da árvore ao lado, segundo a condição ordem simétrica (percorrer sae, tratar raiz, percorrer sad).

Resultado: 40, 80, 26, 90, 13, 43, 75, 34, 55, 1, 5, 17.

34

55

5

1 17

90

75

26

13

4340

80

Pós-Ordem Imprima os valores

presentes nos nós da árvore ao lado, segundo a condição pós-ordem (percorrer sae, percorrer sad, tratar raiz).

Resultado: 40, 90, 26, 13, 75, 43, 80, 1, 17, 5, 55, 34.

34

55

5

1 17

90

75

26

13

4340

80

Aplicações de Árvores Binárias (1/2)

Como árvores binárias de pesquisa (busca)

Aplicações de Árvores Binárias (2/2)

Análise de expressões algébricas: prefixa, infixa e pósfixa.

Prefixa: + * + 3 6 – 4 1 5 = 32

Infixa: 3 + 6 * 4 – 1 + 5 = 32

Pósfixa: 3 6 + 4 1 - * 5 + = 32

Definição da Estrutura de Árvores Binárias

Como definir o Tipo Abstrato de Dados (TAD) que representa árvores binárias?

Há duas formas: Estática; Dinamicamente;

Representação Dinâmica

Criar um registro contendo os seguintes campos: info, sae e sad.

Este registro é auto-referenciado através dos campos sae e sad.

struct arv {int info;struct arv* sae;struct arv* sad;

}; typedef struct arv Arv;

Registro dos nós de uma AB

infosae sad

Principais funções sobre AB Iniciar árvores como vazias; Inserir nós na árvore; Verificar se árvore está vazia; Informar a altura da árvore; Pesquisar ocorrência de um valor no nó da

árvore; Liberar estrutura alocada para as árvores; Percorrer a árvore em pré-ordem; Percorrer a árvore em em-ordem (ordem

simétrica); Percorrer a árvore em pós-ordem.