Você está na página 1de 35

Estruturas de dados

Árvores

Aula 15
Árvores
Uma árvore é uma estrutura de dados que se caracteriza por
uma relação de hierarquia entre os elementos que a compõe.
Ex: - Organograma de uma empresa.
- Divisão de um livro em capítulos, seções, tópicos.
- Estruturas de diretórios.

Presidente

Diretor Diretor
Comercial Administrativo

Gerente Gerente Gerente Gerente


Depto A Depto B Depto C Depto D
2
Árvores
Definição: É um conjunto finito T de um ou mais nodos tal que:

- Existe um nodo denominado raiz da árvore.


- Os demais nodos formam n>=0 subconjuntos disjuntos t1,t2,...,tn ,
onde cada um deles é uma árvore. As árvores ti , (1 <= i <= n)
recebem a denominação de subárvores.

A
t1 t3
t2
B D
C

E F G

3
Árvores

Terminologia

raiz: Nodo de origem da árvore.

folha (nodo terminal): Nodo que não tem filhos.

grau de um nodo: número de filhos do nodo.

nível de um nodo: zero para o nodo raiz; e para os demais


nodos é o número de “linhas” que o ligam ao nodo raiz.

altura (ou profundidade): é o nível mais alto da árvore.


4
Árvores

Raiz
A

Nível 0

Grau 1
B C Grau 2 D
Nível 1

E F G H Grau 3

Nível 2

I J K
Nível 3
Grau 0 5
Árvores binárias
São árvores em que todos os nodos tem grau menor ou igual a dois.

A Raiz Subárvore
Subárvore direita
esquerda

B D

E F H

G
J K

6
Percursos em árvores binárias

● Pré-ordem
● Em-ordem
● Pós-ordem
● Em-nível

7
Percurso em pré-ordem
inicio
se árvore não é vazia então
Visitar o nodo raiz
Percorrer a subárvore esquerda
Percorrer a subárvore direita
fim_se
fim
Exemplo

1o. A

B C

2o. 3o.
A B C 8
Percurso em pré-ordem

B C

D E F

G H

? ? ?
9
Percurso em pré-ordem

B C

D E F

G H

ABDEGCFH
10
Percurso em-ordem
inicio
se árvore não é vazia então
Percorrer a subárvore esquerda
Visitar o nodo raiz
Percorrer a subárvore direita
fim_se
fim
Exemplo

2o. A

B C

1o. 3o.
B A C 11
Percurso em-ordem

B C

D E F

G H

? ? ?
12
Percurso em-ordem

B C

D E F

G H

DBGEACHF
13
Percurso em pós-ordem
inicio
se árvore não é vazia então
Percorrer a subárvore esquerda
Percorrer a subárvore direita
Visitar o nodo raiz
fim_se
fim
Exemplo

3o. A

B C

1o. 2o.
B C A 14
Percurso em pós-ordem

B C

D E F

G H

? ? ?
15
Percurso em pós-ordem

B C

D E F

G H

DGEBHFCA
16
Percurso em nível
inicio
Inserir o nodo raiz em uma fila
Enquanto a fila não estiver vazia
Retirar o nodo T da fila
Visitar T
Adicionar os filhos de T na fila
fim_Enquanto
fim Exemplo

B C

D E
A B C D E 17
Percurso em nível
inicio
Inserir o nodo raiz em uma fila
Enquanto a fila não estiver vazia
Retirar o nodo T da fila
Visitar T
Adicionar os filhos de T na fila
fim_Enquanto
fim Exemplo

B C

D E
A B C D E 18
Percurso em nível

X D

H E F

G J

? ? ?
19
Percurso em nível

X D

H E F

G J

AXDHEFGJ
20
Árvores - Implementação
Representação por encadeamento:
raiz
1200

esq 1200 dir

1300

1000
32

esq 1300 dir esq 1000 dir


NULL

2200
1100
NULL

15 42

esq 1100 dir esq 2200 dir

NULL
NULL

NULL
35 55
NULL

21
Árvores - Implementação
Nodo para armazenar um inteiro
esq info dir

324
1530

1000
1200

esq: contém o endereço do nodo filho a esquerda (NULL se não


possui filho a esquerda).

info : contém a informação armazenada (Ex: um inteiro).

dir: contém o endereço do nodo filho a direira (NULL se não


possui filho a direita).
22
Árvores
typedef struct {
int cod;
float sal;
} Dado;

typedef struct nodo Nodo;

struct nodo {
Dado info;
Nodo *esq;
Nodo *dir;
};

typedef struct {
Nodo *raiz;
} Arvore;
23
Árvore de busca binária
Os dados são distribuídos pelos nodos de forma a facilitar a
pesquisa de um determinado elemento.

Uma árvore binária, cuja raiz armazena o elemento R, é


denominada árvore de busca binária se:

1) Todo elemento armazenado na subárvore esquerda é menor


que R.

2) Nenhum elemento armazenado na subárvore direita é menor


que R.

3) As árvores esquerda e direita também são árvores de busca


binária.
24
Árvore de busca binária

30

20 40

10 25 50

22 42 60

25
Árvore de busca binária - inserção

início
se a árvore está vazia então
inserir o nodo
senão
se o dado do nodo que será inserido é menor
que o dado armazenado no nodo raiz então
inserir o nodo na subárvore esquerda
senão
inserir o nodo na subárvore direita
fim_se
fim_se
fim

26
Árvore de busca binária
Inserir os nodos: 30 20 25 10 40 em uma árvore vazia.

30
30
30 20
20
25

30 30

20 20 40

10 25 10 25 27
Árvore de busca binária - procura

início
se a árvore está vazia então
nodo não encontrado
senão
se a raiz armazena o elemento procurado então
nodo encontrado
senão
se o valor procurado for menor que o valor
armazenado no nodo raiz então
procurar a partir da subárvore esquerda
senão
procurar a partir da subárvore direita
fim_se
fim_se
fim_se
fim 28
Árvore de busca binária
Procurar os nodos:
27
25 30

20 40

10 25 50

22 42 60

29
Árvore de busca binária - remoção

Procurar o elemento a ser removido. Caso seja encontrado:

Existem 3 casos:

1) O elemento removido não possui filhos. Remover o nodo e tornar


nula a raiz da subárvore.
50 N

N 40

N 20 N N 45 N

30
Árvore de busca binária - remoção

2) O elemento removido possui um filho. Remover o nodo


substituindo-o pelo seu nodo filho.

N 50

70

N 60 N 80 N

N 65 N
31
Árvore de busca binária - remoção

3) O elemento removido possui dois filhos. Procurar o nodo que armazena


o maior elemento na subárvore esquerda. Este nodo será removido e o
elemento armazenado será copiado para o nodo excluído.

N 50

70

N 60 N 80 N

N 65 N
32
Árvore de busca binária - remoção

N 50

65

N 60 N 80 N

N 65 N

33
Árvores de grau qualquer
Para representar árvores de grau qualquer utilizar uma árvore binária
fornecendo aos ponteiros esq e dir significados diferentes:

esq : passa a armazenar o endereço do primeiro filho.


dir: passa a armazenar o endereço do irmão.

B C D

E F G H I J

34
Árvores de grau qualquer
A

C
E

G D
F
H

K J

35

Você também pode gostar