computação iiianteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas,...
TRANSCRIPT
![Page 1: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/1.jpg)
Computação III Professor: Mtr. David Batard Lorenzo
Instituto Superior para as Tecnologias de Informção e Telecomunicação
ISUTIC
![Page 2: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/2.jpg)
Computação III
• David Batard Lorenzo
Cubano.
Bacharel em Ciência da Computação (2004)
Mestrado em Ciências da Computação (2007)
Professor Assistente (2009)
Apresentação do professor
![Page 3: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/3.jpg)
Estruturas de dados no lineares
Título: Recursão. O TDA Árvore.
![Page 4: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/4.jpg)
Bibliografia da matéria
–Aho, Hopcroft, Ullman. Estructura de Datos y
Algoritmos.
– CORMEN, T. H. et al. Algoritmos: Teoria e Prática; Rio
de Janeiro: Editora Campus, 2002.
– Thomas H. Cormen, Charles E. Leiserson. Introduction
to Algorithms. Second Edition.
–TAMASSIA, R. e GOODRICH, M. T. Estruturas de
Dados e Algoritmos em JAVA; Porto Alegre: Editora
Bookman, 2002.
![Page 5: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/5.jpg)
Objectivos
• Caracterizar o funcionamento dos algoritmos recursivos.
• Caracterizar o TDA Árvore e sua implementação
![Page 6: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/6.jpg)
Lembrete:
Estrutura de dados
• Coleção de variáveis,
• relacionados de alguma forma
• que definiu um conjunto de operações
• que satisfaçam determinadaspropriedades.
![Page 7: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/7.jpg)
Lembrete
Tipo de Dado Abstrato
• Modelo matemático
• consiste em um conjunto de dados
• e as operações definidas para esseconjunto de dados.
![Page 8: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/8.jpg)
Lembrete
Tipo de Dado Abstrato
TDA
Estrutura de Dados
Operações
![Page 9: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/9.jpg)
Sumário
• Conceito de recursão.
• Partes de um algoritmo recursivo.
• Definições de árvore. Definição recursiva de árvore.
• Terminologia relacionada com o TDA Árvore.
• Percorridos em árvores.
• Definição do TDA Árvore. Operações e
representação.
![Page 10: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/10.jpg)
Exemplos de conceitos recursivos
Há conceitos que se utilizam a si mesmos para se explicar.
- Um ramo de uma árvore tem ramos…
![Page 11: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/11.jpg)
Exemplos de conceitos recursivos
- Os ficheiros e pastas de um disco de computadores alojam-seem pastas…
![Page 12: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/12.jpg)
Exemplos de conceitos recursivos
- As Matriuskas Russas (bonecas de madeira ou varro que contêmoutras bonecas iguais mas mais pequenas dentro)
![Page 13: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/13.jpg)
Algoritmo Recursivo
Há algoritmos que se explicam em termos de si mesmos. Umalgoritmo que se define parcialmente em termos de si mesmos sedenomina recursivo.
(Epígrafe 9 pág. 1 del Katrib)
![Page 14: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/14.jpg)
Algoritmo Recursivo
O método recursivo é um método que chama a si própriodiretamente ou indiretamente, através de outro método.
(Epígrafe 6.12, pág. 286 del “Java ,como programar”/H.M.Deitei
LangLisboa.-4,ed.-PortoAlegre:Bookman,2003) En Portugues
![Page 15: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/15.jpg)
Exemplo de Algoritmo RecursivoUm exemplo de função recorrente é a definição dada para ocálculo do factorial de um número.
1. O Factorial de 0 é 1.
2. O Factorial de um n > 0 é
n * Factorial de n-1.
![Page 16: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/16.jpg)
Exemplo de Algoritmo RecursivoA Sucessão de Fibonacci define-se mediante a função derecurrencia.
f0 = 0
f1 = 1
fn = fn-1 + fn-2 (n ≥ 2)
![Page 17: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/17.jpg)
Partes de um Algoritmo RecursivoCaso base:
• Parte mais simples.
• Caso ou casos triviais para os que se conhece umasolução direta.
Parte ou etapa recursiva:
• Parte mais complexa.
• Parte onde se faz alusão à própria definição.
![Page 18: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/18.jpg)
Mais sobre os Algoritmos Recursivos
1.Pode ter mais de um caso base e a parte recursiva podecontar com mais de uma instrução.
2.O caso base actua como condição de terminação darecursividad. Sem a existência ou identificação do caso base arotina chamar-se-ia indefinidamente.
![Page 19: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/19.jpg)
Mais sobre os Algoritmos Recursivos
3.A parte recursiva é a que encarregar-se-á de dividir o problemagrande num mais pequeno até chegar a uma solução direta ousingela que será um dos casos baseie..
Es de suma importancia que la parte recurrente converja a un casobase para lograr la terminación del algoritmo.
![Page 20: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/20.jpg)
Problema (Factorial)
Execução:
factorial(3) = 3*factorial(2) = 3 * (2 * factorial(1)) = 3*(2*(1*factorial(0))) = 3*2*1= 6.
Constrói-se a solução para n=3 a partir do caso base..
Solução:
public int factorial(int n) {
if(n == 0)
return 1;
return n * factorial(n-1);
}
![Page 21: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/21.jpg)
¿Como funciona um método recursivo?
![Page 22: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/22.jpg)
public static void main(String []args){
int x = 3;
int fac = factorial(x);
}
![Page 23: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/23.jpg)
public static void main(String []args){
int x = 3;
int fac = factorial(x);
factorial(3){
if (3==0) return 1;
return 3*factorial(3-1);}
![Page 24: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/24.jpg)
public static void main(String []args){
int x = 3;
int fac = factorial(x);
factorial(3){
if (3==0) return 1;
return 3*factorial(3-1);
factorial(2){
if (2==0) return 1;
else return 2*factorial(2-1);
![Page 25: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/25.jpg)
public static void main(String []args){
int x = 3;
int fac = factorial(x);
factorial(3){
if (3==0) return 1;
return 3*factorial(3-1);
factorial(2){
if (2==0) return 1;
return 2*factorial(2-1);
factorial(1){
if (1==0) return 1;
return 1*factorial(1-1);
![Page 26: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/26.jpg)
public static void main(){
int x = 3;
int fac = factorial(x);
factorial(3){
if (3==0) return 1;
return 3*factorial(3-1);
factorial(2){
if (2==0) return 1;
return 2*factorial(2-1);
factorial(1){
if (1==0) return 1;
return 1*factorial(1-1);
caso base atingido !!
factorial(0){
if (0==0) return 1;
![Page 27: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/27.jpg)
public static void main(){
int x = 3;
int fac = factorial(x);
factorial(3){
if (3==0) return 1;
return 3*factorial(3-1);
factorial(2){
if (2==0) return 1;
return 2*factorial(2-1);
factorial(1){
if (1==0) return 1;
return 1*1;
![Page 28: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/28.jpg)
public static void main(){
int x = 3;
int fac = factorial(x);
factorial(3){
if (3==0) return 1;
return 3*factorial(3-1);
factorial(2){
if (2==0) return 1;
return 2*1;
![Page 29: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/29.jpg)
public static void main(){
int x = 3;
int fac = factorial(x);
factorial(3){
if (3==0) return 1;
return 3*2;
![Page 30: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/30.jpg)
public static void main(String []args){
int x = 3;
int fac = 6;
}
![Page 31: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/31.jpg)
Anteriormente tinha-se estudado as estruturas de dadoslineares (listas, pilhas, filas). Nas que a cada elemento tinhaum elemento diante e outro detrás e para o percorrer erasuficiente seguir um caminho em linha reta.
No entanto não sempre podemos resolver os problemasusando este tipo de estrutura.
![Page 32: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/32.jpg)
Estruturas de Dados LinearesNão podem representar todo o tipo de problemas
Estruturas de Dados no Lineares
Representam os dados de maneira
bem mais próxima à realidade
Árvore
![Page 33: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/33.jpg)
A estrutura de árvore expressa umarelação hierárquica entre os elementosde um conjunto dado.
![Page 34: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/34.jpg)
Exemplo: Representação da estrutura de um exército
![Page 35: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/35.jpg)
Estado Maior FAA
Região Militar Norte Região Militar Centro Região Militar Sur
Regimento1 Regimento2 Regimento 3
Esquadrão1 Esquadrão2 Esquadrão3
Soldado1 Soldado2 Soldado3
… …
… …
… …
![Page 36: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/36.jpg)
Outros exemplos de árvores
![Page 37: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/37.jpg)
Índice de um livro
![Page 38: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/38.jpg)
Árvore genealógico
![Page 39: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/39.jpg)
Sistema de arquivos Unix
![Page 40: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/40.jpg)
Figura
+Figura()
+CalcularArea() : double
+CalcularPerimetro() : double
Círculo
- centro: Punto
- radio : double
+Círculo(p1: Punto, r: double)
Triángulo
- Punto1: Punto
- Punto2: Punto
- Punto3: Punto
+Triángulo( p1: Punto, p2: Punto, p3:
Punto)
Paralelogramo
- Punto1: Punto
- Punto2: Punto
- Punto3: Punto
- Punto4: Punto
+ Paralelogramo ( p1: Punto, p2:
Punto, p3: Punto, p4: Punto)
Rectángulo
+ Rectángulo(supIzq: Punto,
supDer: Punto,
infIzq: Punto, infDer: Punto)
Cuadrado
+ Rectángulo(supIzq: Punto,
supDer: Punto,
infIzq: Punto, infDer: Punto)
Rombo
+ Paralelogramo ( p1: Punto, p2:
Punto, p3: Punto, p4: Punto)
Hierarquia de classes
![Page 41: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/41.jpg)
Algumas representações gráficas de árvores
•Grafo
•Conjuntos aninhados
•Parênteses aninhados
•Indentación
![Page 42: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/42.jpg)
Grafo
A
B C
ED HGF
I LKJ O M N P
![Page 43: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/43.jpg)
Conjuntos aninhados
A
B
C
E
K
J
L
G
F H
P
M N
OD
I
![Page 44: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/44.jpg)
Parênteses aninhados
(A,
(B, (D, (I)),(E, (J),(K),(L))),
(C, (F, (O)),(G, (M),(N)),(H, (P)))
)
![Page 45: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/45.jpg)
Indentación
A B
D
IE
J
KL
C
FO
G
MN
H
P
![Page 46: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/46.jpg)
Definições de Árvore
![Page 47: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/47.jpg)
Definição de Árvore segundo a teoria de grafo
Uma árvore é um grafo conexo, nãodirigido e acíclico.
![Page 48: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/48.jpg)
Grafo com ciclo
NÃO é uma árvore
![Page 49: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/49.jpg)
Árvore (Grafo conexo, não dirigido e acíclico)
![Page 50: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/50.jpg)
Definição recursiva de árvore
(Horowitz, Capítulo 5)
![Page 51: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/51.jpg)
Uma árvore T é um conjunto de elementos (que denominaremos nós), finito e não vazio, que cumpre:• Existe um nó especial r denominado raiz
da árvore;•Os restantes nós estão particionados em n
(n≥0) subconjuntos disjuntosT1 , T2, …, Tn,
sendo a cada um deles, uma árvore.
![Page 52: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/52.jpg)
À cada subconjunto disjunto Ti :
T1 , T2, …, Tn,
Chamar-lhe-emos em adiante-o subárvoreassociado à árvore T.
![Page 53: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/53.jpg)
r
T1T2 Tn-1 Tn
![Page 54: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/54.jpg)
•Da definição dada deduze-se que aárvore mínima está composto por umsozinho nó: a raiz.
•
Por exemplo Ta = {A} é uma árvoredeste tipo.
A
![Page 55: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/55.jpg)
B
C
Quando há mais de um nó, após ter seleccionado araiz, os restantes nós são particionados emsubárvores.
Por exemplo Tb= {B,{C}} é uma árvore composta deuma raiz e do subárvore {C} que a sua vez está
composto por um sozinho nó.
Tb
![Page 56: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/56.jpg)
TD = {D,{E, {F}}, {G, {H,{I}},{J,{K},{L}},{M}}}
é uma árvore já que consta de uma raiz D e dois conjuntos
{E, {F}}{G, {H,{I}},{J,{K},{L}},{M}}
ue a sua vez são árvores.JH
I
G
D
M
K L
F
![Page 57: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/57.jpg)
Terminologia
![Page 58: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/58.jpg)
Inicialmente introduziremos os conceitos de:
• Pai (Padre)
• Filho (Hijo)• Irmão (Hermano)
• Grau (Grado)
• Folha (Hoja)
![Page 59: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/59.jpg)
Pai: À raiz r da árvore T denomina-se-lhe pai de todas asraízes ri dos subárvores Ti de T.
Por exemplo:• D é pai de E e G
• G é pai de H, J e M
• K não é pai de
nenhum nó
JH
I
G
D
M
K L
F
![Page 60: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/60.jpg)
Filho: A cada raiz ri do subárvore Ti da árvore T de raiz ré denominado filho de r.
Por exemplo:
• E e G são filhos de D
• H, J e M são filhos de G
• D não é filho de nenhum nóJH
I
G
D
M
K L
F
![Page 61: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/61.jpg)
Irmãos: Duas raízes ri e rj de duas subárvoresdiferentes Ti e Tj da árvore T são denominados irmãos
T• E e G são irmãos(pois são as raízes de filhos de T)
• H, J e M são irmãos(pois são as raízes de filhos de G
em TG)
• F não tem irmãos
TG
JH
I
G
D
M
K L
F
![Page 62: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/62.jpg)
Grau de um nó é o número de subárvores associadoscom o nó. O grau da árvore é o grau da raiz
Por exemplo o grau de:
-a raiz D da árvore T é 2-do nó G é 3-grau da árvore é 2
JH
I
G
D
M
K L
F
![Page 63: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/63.jpg)
Folha: Os nós de grau zero (não têm subárvoresassociados) são denominados folhas.
Por exemplo são folhas
os nós F, I, K, L e M.
JH
I
G
D
M
K L
F
![Page 64: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/64.jpg)
Outras terminologias
![Page 65: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/65.jpg)
Definição de camino: Dado uma árvoreT um caminho é uma sucessão nãovazia r1,. . . , rn de nós de T, quecumpre que para 1≤ i <n tem-se queri é pai de ri+1 .
A longitude de um caminho é o númerode nós do caminho menos 1
![Page 66: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/66.jpg)
As seguintes sucessões de nós:G,H,ID,E,FD,G,J,Ksão caminos
D,E,H não é caminho. JH
I
G
D
M
K L
F
![Page 67: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/67.jpg)
As seguintes sucessões de nós:G,H,I (longitude 2)D,E,F (longitude 2)D,G,J,K (longitud 3)são caminos
D,E,H não é caminho. JH
I
G
D
M
K L
F
![Page 68: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/68.jpg)
Baseados no conceito de caminho se define: •O nível ou profundidade de um nó•O peso ou altura de um nó•O peso ou altura de uma árvore• Ancestro. Ancestro próprio•Descendente. Descendente próprio
![Page 69: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/69.jpg)
O nível ou profundidade de um nó ri
de T é a longitude do único caminhoda raiz r ao nó ri.
Por exemplo:
•o nível de D é 0
•o nível de J é 2
•o nível de K é 3 JH
I
G
D
M
K L
F
![Page 70: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/70.jpg)
O nível ou profundidade de um nó ri deT pode-se definir também pelaseguinte expressão recursiva:
0 Se ri é a raiz
Nível(ri) =
Nível(rp)+1 Se rp é pai de ri
![Page 71: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/71.jpg)
O peso ou altura de um nó ri de T é a longitude do maior caminho de ri às folhasO peso de uma árvore é o peso da raizPor exemplo o peso de
G é 2M é 0D é 3
E o peso da árvore é 3já que o peso da raiz é 3
JH
I
G
D
M
K L
F
![Page 72: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/72.jpg)
O peso ou altura de um nó ri de Tpode-se definir também pela seguinteexpressão recursiva:
0 Se ri é uma folha
Peso(ri) =
Max(Peso(rj)) + 1 onde rj são
todos os filhos de ri
![Page 73: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/73.jpg)
Um nó rp é ancestro de rq se existe um caminho de rp a rq.
Se a longitude do caminho
de rp a rq é 1 diz-se
que rp é um ancestro
próprio de rq. • D ancestro de E e F
• G ancestro de K
• J ancestro próprio de KJH
I
G
D
M
K L
F
![Page 74: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/74.jpg)
Um nó rp é descendente de rq e existe umcaminho de rq a rp.
Se a longitude do caminho de rq a rp é 1 diz-se que rp é
um descendente próprio
de rq.E descendente de DK descendente de GK descendente próprio de J
JH
I
G
D
M
K L
F
![Page 75: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/75.jpg)
Percorridos
![Page 76: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/76.jpg)
Lista: Utilizando o índice i-ésimo da cada elemento.
Pilha: Acedendo na cada iteração ao topo da pilha.
Fila: Acedendo na cada iteração à frente da fila.
¿Como o faço nas estruturas de dados lineares?
![Page 77: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/77.jpg)
Essencialmente existem doisenfoques diferentes para visitartodos os nós de uma árvore:• percorrido em profundidade
• percorrido na largura.
![Page 78: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/78.jpg)
Percorridos em profundidade
![Page 79: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/79.jpg)
Os percorridos de uma árvore emprofundidade podem serrealizados de três formas:• percorrido em preorden• percorrido em entreorden• percorrido em postorden
![Page 80: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/80.jpg)
O percurso em preorden de umaárvore ( com mais de um nó) estáformado pela lista de nós que seobtém da seguinte forma:
1. Visitando a raiz da árvore2. Percorrendo em preorden a cada um dos subárvores da raiz.
![Page 81: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/81.jpg)
A lista de um dos percorridos empreorden dos nós da árvore é:
D,E,F,G,H,I,J,K,L,M
JH
I
G
D
M
K L
F
![Page 82: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/82.jpg)
O percorrido em entreorden de umaárvore ( com mais de um nó) está formadopela lista de nós que se obtém da seguinteforma :
1. Percorrendo em entreorden um dossubárvores da raiz
2. Visitando a raiz da árvore3. Percorrendo em entreorden a cada um
dos restantes subárvores da raiz
![Page 83: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/83.jpg)
A lista de um dos percorridos ementreorden dos nós da árvore é:
F,E,D,I,H,G,K,J,L,M
JH
I
G
D
M
K L
F
![Page 84: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/84.jpg)
O percorrido em postorden de uma árvore ( com mais de um nó) está formado pela lista de nós que se obtém da seguinte forma:
1. Percorrendo em postorden a cada um dos subárvores da raiz
2. Visitando a raiz da árvore
![Page 85: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/85.jpg)
A lista de um dos percorridos empostorden dos nós da árvore é:
F,E,I,H,K,L,J,M,G,D
JH
I
G
D
M
K L
F
![Page 86: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/86.jpg)
Algoritmo para percorrido em Preorden
Lista PercorridoEmPreorden ()
Criar lista
Preorden(lista)
retornar lista
fim // PercorridoEmPreorden
![Page 87: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/87.jpg)
Algoritmo para percorrido em Preorden
Preorden (Lista L )
L.Adicionar(raiz)
Desde i = 0 Até grau-1 Com Passo 1 Fazer
Subárvore[i].Preorden (L)
fim // Preorden
/* note que para grau = 0 nunca se executa o ciclo*/
![Page 88: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/88.jpg)
Tarefa
Estudar percorridos em profundidade em Epígrafe 3.1
do Aho e desenhar em seucódigo os algoritmos Entreorden e Postorden
![Page 89: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/89.jpg)
Percorrido na largura
![Page 90: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/90.jpg)
O percorrido na largura deuma árvore lista os nós naordem de níveis ouprofundidade na árvore.
![Page 91: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/91.jpg)
No percorrido na largura visita-se o nó do nível 0 (isto é a raiz), aseguir todos os nós do nível 1,depois todos os nós do nível 2 eassim sucessivamente.
![Page 92: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/92.jpg)
O percorrido
na largura
da árvore
Tc é:
D, E, G, F, H, J, M, I, K, L
JH
I
G
D
M
K L
F
![Page 93: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/93.jpg)
Algoritmo para Percorrido na largura
Lista Na_Largura( )
Criar L
Criar FilaAux
FilaAux.Adicionar(arvore)
Enquanto ! FilaAux.Vazia()
arvoreActual = FilaAux.Extrair()
L.Adicionar(arvoreActual.Raiz())
Desde i=0 Até arvoreActual.Grau()-1 Com Passo 1 Fazer
FilaAux.Adicionar(arvoreActual.Subarvore[i])
FIm // Enquanto
retornar L
FIM // Na_Largura
![Page 94: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/94.jpg)
•Realizar o percorridos nasdiferentes ordens dadas dasárvores descritas na classe.
Tarefa
![Page 95: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/95.jpg)
O TDA árvore
![Page 96: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/96.jpg)
Operações
![Page 97: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/97.jpg)
• Raíz() Retorna o objeto contidona raiz da árvore.
• ÉFolha() Retorna True se aárvore é uma folha
• Grau() Retorna o Grau da árvore
![Page 98: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/98.jpg)
•Altura() Retorna o peso ou altura daárvore
•Subarvore(i) Retorna uma cópia dei-esimo subárvore da árvore
•AdicionarSubarvore(Arvore)Adiciona uma árvore à lista desubárvores.
![Page 99: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/99.jpg)
• PercorridoEmPreorden()• PercorridoEmEntreorden()• PercorridoEmPostorden()
Implementam os percorridos empreorden, entreorden e postordenda árvore.
• PercorridoNaLargura ()Implementa o percorrido na largurada árvore.
![Page 100: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/100.jpg)
Estruturas de dados para a representação de árvores
![Page 101: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/101.jpg)
ArvoreGeral
-raiz : T-subArvores : Lista <ArvoreGeral<T>>
+ ArvoreGeral(raiz: T) + Raiz() : T+ EFolha () : boolean+ Grau() : int+ Altura(): int+ SubArvore(pos: int) : ArvoreGeral<T>+ AdicionarSubArvore(n: ArvoreGeral<T>) + PreOrden() : Lista<T>+ PostOrden(): Lista<T>+ EntreOrden(): Lista<T>+ NaLargura(): Lista<T>
T
![Page 102: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/102.jpg)
Conclusões
A árvore é uma estrutura de dadoscomplexa que deve ser estudadacom profundidade.
![Page 103: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/103.jpg)
Conclusões
Sua terminologia é singela, masprecisa-se de um pensamentorecursivo para entendê-la melhor.
![Page 104: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/104.jpg)
Conclusões
Os aplicativos desta estrutura de dados são muito amplas, daí a importância que tem a conhecer muito bem.
![Page 105: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/105.jpg)
Tarefa
•Implementar o TDA Árvore usando a representação de lista de filhos..
![Page 106: Computação IIIAnteriormente tinha-se estudado as estruturas de dados lineares (listas, pilhas, filas). Nas que a cada elemento tinha um elemento diante e outro detrás e para o percorrer](https://reader030.vdocuments.mx/reader030/viewer/2022040618/5f2b0ee82604b21414519a40/html5/thumbnails/106.jpg)