Árvores e Árvores binárias. roteiro contextualização Árvores Árvores binárias
TRANSCRIPT
Á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.