Árvores e Árvores Binárias. Roteiro Contextualização Árvores Árvores Binárias.

Post on 07-Apr-2016

252 views 2 download

Transcript of Árvores e Árvores Binárias. Roteiro Contextualização Árvores Árvores Binárias.

Árvores e Á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.

Roteiro Contextualização

Árvores

Árvores Binárias

Árvores - Introdução Em computação, uma árvore é um modelo

abstrato de uma estrutura hierárquica; Trata-se de uma estrutura não-linear

constituída de nós com relações de parentesco (pai-filho);

Aplicações: S.O.s (arquivos). Linguagens (O.O.). etc

Árvores - Introdução Árvores são adequadas para representar

estruturas hierárquicas não lineares, como relações de descendência pai, filhos, irmãos, etc.

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

Árvores - 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).

Exemplo

Terminologia Raiz (root): nó sem pai (A). Nó Interno: nó com pelo

menos um filho (A, B, C, F). Nó Externo ou Folha: nó

sem filhos (E, I, J, K, G, H, D). Ancestrais (de um nó): pai

ou ancestrais do pai do nó. Descendentes (de um nó):

nós que o possuem como ancestral.

Sub-Árvore: árvore consistindo de um nó e dos seus descendentes.

Exemplo

Terminologia O NÍVEL de um nó X é definido como:

O nível de um nó raiz é 1 O nível de um nó não raiz é dado por

Nível de seu nó PAI + 1 O GRAU de um nó X pertencente a uma

árvore é igual ao número de filhos de X Se X é folha, então Grau(X) = 0

O GRAU de uma árvore T é o maior entre os graus de todos os seus nós

Exemplo

Terminologia Profundidade (de um nó):

número de ancestrais. Raiz possui profundidade zero.

Altura (de uma árvore): máxima profundidade de qualquer nó.

Exemplo ao lado ⇒ 3. Altura (de um nó): altura da

sub-árvore com raiz naquele nó. Folhas possuem altura zero. Raiz possui altura da árvore.

Profundidade (de uma árvore): máx. profundidade de uma folha.

Equivalente à altura.

Exemplo

Outras formas de representação Representação por Parênteses

Aninhados: ( A (B) ( C ( D (G) (H) ) (E) ( F (I) ) ) ) ou seja, uma lista generalizada!!

Representação por Diagramas de Venn:

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.

Exemplos de árvoresA

B C D

E F

L

G H I J

M N

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)?Qual é a altura da árvore?

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 ?Resposta: nível – 1

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

Árvore binária própria Também denominada de árvore estritamente binária, é

tal que: Cada nó interno possui exatamente 2 filhos (não vazios).

Denomina-se o par de filhos de: filho esquerdo (left child), e filho direito (right child).

Definição recursiva: Uma árvore de um único nó raiz, ou Uma árvore cuja raiz possui um par ordenado de filhos, cada um dos quais é a raiz de uma árvore binária própria.

ExemploÁrvore binária própria Árvore de Expressão

Aritmética Árvore Binária associada com uma

expressão aritmética Nós internos: operadores Nós externos: operandos

Exemplo: (2 * (a - 1) + (3 * b))

Árvore Binária Completa É própria* Se a profundidade da árvore é d, então

cada nó folha está no nível d ou no nível d+1

Os nós folha no nível d estão todos à direita dos internos

Árvore Binária Completa Cheia Todos os seus nós folha estão no

mesmo nível

Árvores Binárias Balanceadas Para cada nó, as alturas de suas

sub-árvores diferem em, no máximo, 1

Exercícios Prove por contra-exemplo que uma AB própria não é

necessariamente uma AB completa. Represente a seguinte expressão aritmética em

uma árvore binária própria de expressão aritmética:( 5 + ( ( 2 / (a + 1) ) - (3 * b) ) ) * ( 10 / c )

Responda com relação à árvore do exercício anterior:

Qual a altura da árvore ?Qual a profundidade da árvore?Qual o grau da árvore?Quais os ancestrais, os descendentes, a profundidade, a altura, o nível, o grau, o pai, os tios, os irmãos e os filhos do nó correspondente ao operador de subtração da expressão ?

Exercícios Represente a árvore do exercício anterior via:

Parênteses Aninhados Diagrama de Venn.

Qual a altura máxima que uma árvore estritamente binária com 45 nós pode ter? Justifique.

Qual a altura máxima que uma árvore estritamente binária com 27 nós externos pode ter? Justifique.

Qual a altura mínima que uma árvore estritamente binária com 43 nós pode ter? Justifique.

Qual a altura mínima que uma árvore estritamente binária com 30 nós externos pode ter? Justifique.

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 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.