Post on 16-Jul-2020
1
Aula 07 Árvores (parte 1) Definição e percurso
Algoritmos e Estruturas de Dados I
Prof. Jesús P. Mena-Chalcojesus.mena@ufabc.edu.br
1Q-2019
2
Vetor (array): Elementos contiguos na memória. Todos do mesmo tipo de dado
3
Vetor (array): Elementos contiguos na memória. Todos do mesmo tipo de dado
Listas ligadas: Elementos não necessariamente contiguos na memória.Podem ter ‘atributos’ diferentes.
4
Vetor (array): Elementos contiguos na memória. Todos do mesmo tipo de dado
Listas ligadas: Elementos não necessariamente contiguos na memória.Podem ter ‘atributos’ diferentes.
Árvores:Elementos não necessariamente contiguos na memória.Podem ter ‘atributos’ diferentes.
5
Structs
Para uma lista ligada:
Para uma lista duplamente ligadae também para uma árvore em quecada nó tenha no máximo 2 ligações:
6
Árvores reais
7
Árvore real “binária”
8
Forma e convenção
Por convenção as árvores“computacionais” tem umarepresentação gráfica comcrescimento invertido.
9
Forma e convenção
10
Forma e convenção
11
12
Representação hierárquica
Representação por barras
Representação por parênteses
13
Árvores
Uma árvore é uma estrutura de dados mais geral que uma lista ligada.
Nessa aula examinaremos os conceitos e operações “mais simples” sobre árvores.
14
Árvores
São estruturas não lineares.
Representação natural para dados aninhados.
Muito úteis para resolver uma enorme variedade do problema envolvendo algoritmos.
Não é uma árvore
15
Árvores
16
Árvore e Floresta
Uma árvore enraizada T, é um conjunto finito de elementos denominados vértices (nós) tais que:
T é uma árvore vazia, ouExiste um vértice chamado raiz de T(r(T))
Uma floresta é um conjunto de árvores. Se v é um vértice de T, a notação T(v) indica a subárvore de T com raiz v.
Um vértice que não possui descendentes próprios é chamado de folha.Um vértice não folha é dito interior.
17
Árvores binárias (binary trees)
Uma árvore binária enraizada T, é um conjunto finito de elementos denominados vértices tais que:
T é uma árvore vazia, ouExiste um vértice chamado raiz de T(r(T)), e os restantes podem ser divididos em dois subconjuntos:
Te(r(T)): a subárvore esquerda da raiz
Td(r(T)): a subárvore direita da raiz
Os quais são também árvores binárias.
18
Exemplo de árvore binária
19
Melhores momentos sobre:Inserção de elementos em uma lista ligada
20
Inserir elemento no início da lista
21
Inserir elemento no final da lista
22
Atividade 01
O que realiza o seguinte programa?
23
Atividade 01
50
10 90
70 100
24
Atividade 01
10
20
30
40
50
25
Busca: O(n) ou O(lg n)
Busca: O(Altura da árvore )
26
Sobre a altura de árvores
27
Árvores binárias (binary trees)
(a) A. estritamente binária:Cada vértice possui 0 ou 2 filhos.
(b) A. binária completa: Os filhos estão no último ou penúltimo nível.
(c) A. cheia: Os filhos estão no último nível.
28
Árvores binárias (binary trees)
O número de subárvores esquerdas e direitas vazias em uma árvore binária com n>0 vértices é n+1.
29
Varredura / Percurso
→ Visita sistematica a cada vértice
– Uma árvore é uma estrutura não sequencial
30
Varredura
Visitar um vértice significa operar, de alguma forma, com a informação a ele relativa.
Percorrer uma árvore significa visitar os seus vértices exatamente um vez.Contudo, no processo de percorrer a árvore pode ser necessário passar várias vezes por alguns de seus vértices sem visitá-los.
Muitos algoritmos sobre árvores ficam mais simples quando escritos de forma recursiva.
31
Varredura
Uma maneira particularmente importante é a ordem esquerda-raiz-direita (e-r-d)
→ inorder traversal.→ percurso em ordem.→ percurso em ordem simétrica.
A subárvore esquerda da raiz, em ordem e-r-d;Depois a raiz;Depois a subárvore direita da raiz, em ordem e-r-d.
32
Varredura
Como seria a varredura e-r-d?
33
Varredura
Na figura abaixo, os nós estão numeradas na ordem da varredura e-r-d.
5
3 8
1 4
0 2
6 9
7
34
Varredura
Uma função recursiva que faz a varredura e-r-d de uma árvore binária:
35
Varredura
0
1 6
2 5
3 4
7 9
8
36
Varredura
9
4 8
2 3
0 1
6 7
5
37
Varredura
9
4 8
2 3
0 1
6 7
5
0
1 6
2 5
3 4
7 9
8
5
3 8
1 4
0 2
6 9
7
erd red
edr
Se n é o número de vértices, e a visita para cada vértice tiver um custo constante, a visita de todos os vértices teria um custo de O(n)
38
Varredura
Uma função recursiva que faz a varredura e-r-d de uma árvore binária r:
Exercício: escrever uma versão iterativa desta função.
//