Capítulo 7 - Estruturas de dados do tipo árvore

profjotamarcosduarte 16 views 29 slides Apr 05, 2024
Slide 1
Slide 1 of 29
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29

About This Presentation

Estruturas de dados do tipo árvore


Slide Content

Capítulo 7 – Estruturas de dados do tipo árvore © 2011 Pearson. Todos os direitos reservados. slide 1

As estruturas de dados do tipo árvore são não lineares, ou seja, os elementos que as compõem não estão armazenados de forma sequencial e também não estão todos encadeados.

Árvores

Árvore binária Conjunto finito de elementos, em que cada um é denominado nó e o primeiro é conhecido como raiz. Pode estar vazio ou ser particionado em três subconjuntos: 1º subconjunto (nó raiz), 2º subconjunto (sub-árvore direita) e 3º subconjunto (sub-árvore esquerda).

As árvores binárias podem ser ilustradas de três formas:

Propriedades da árvore binária: a) Todos os nós de uma sub-árvore direita são maiores que o nó raiz. b) Todos os nós de uma sub-árvore esquerda são menores que o nó raiz. c) Cada sub-árvore é também uma árvore binária. d) O grau de um nó representa o seu número de sub-árvores.

e) Na árvore binária, o grau máximo de um nó é 2. f) O grau de uma árvore é igual ao máximo dos graus de todos os seus nós. g) Uma árvore binária tem grau máximo igual a 2. h) Nó pai: nó acima e com ligação direta a outro nó. i) Nó filho: nó abaixo e com ligação direta a outro nó. São os nós raízes das sub-árvores. j) Nós irmãos: são que possuem o mesmo nó pai. k) Nó folha ou terminal: nó que não possui filhos.

Graus dos nós de uma árvore binária

l) Nós ancestrais: estão acima de um nó e têm ligação direta ou indireta.

m) Nós descendentes: estão abaixo de um nó e possuem ligação direta ou indireta.

n) Nós descendentes direito: estão abaixo de um nó, possuem ligação direta ou indireta e fazem parte da sub-árvore direita.

o) Nós descendentes esquerdo: estão abaixo de um nó, possuem ligação direta ou indireta e fazem parte da sub-árvore esquerda.

p) Nível de um nó: distância do nó raiz. q) Altura ou profundidade da árvore: nível mais distante da raiz.

r) Expressão que representa o número máximo de nós em um nível da árvore binária = 2 n , ond e n é o nível em questão .

s) Árvore estritamente binária: árvore em que todos os nós têm 0 ou 2 filhos. t) Expressão que representa o número de nós de uma árvore estritamente binária = 2n−1 , onde n é o número de nós folha.

u) Árvore completa: todos os nós com menos de dois filhos ficam no último e no penúltimo nível.

v) Árvore cheia: árvore estritamente binária e completa.

Na inserção, as propriedades da árvore devem ser obedecidas e todo novo nó é sempre uma folha. Na remoção, o filho da direita, que é o mais velho, assume o lugar do nó pai. Na consulta (em ordem, pré-ordem e pós-ordem), todos os nós são listados, alterando-se apenas a ordem.

- Consulta em ordem: cada árvore é mostrada com o ramo da esquerda, a raiz e posteriormente o ramo da direita. - Consulta pré-ordem: cada árvore é mostrada com a raiz, o ramo da esquerda e posteriormente o ramo da direita. - Consulta pós-ordem: cada árvore é mostrada com o ramo da esquerda, o ramo da direita e posteriormente a raiz.

Consultas em um árvore binária

Análise da complexidade As árvores em que cada nó possui um único filho têm altura máxima (igual a n ) . Segundo Markenzon (1994), uma árvore binária completa com n > 0 nós possui altura mínima h = 1 + └ log n ┘ .

O custo da busca é igual ao número de nós no caminho da raiz da árvore até o nó procurado. Na árvore binária genérica, no pior caso, está a uma distância O ( n ) da raiz, logo, a complexidade da busca é O ( n ) , que corresponde à altura da árvore. No melhor caso, em que uma árvore pode possuir altura mínima, o tempo de busca é O ( log n ) .

Na inserção , o nó sempre é inserido em uma folha, e deve percorrer todos os nós desde a raiz, até chegar a uma folha e acrescentar um filho, gastando nisso a altura da árvore, ou seja, O ( log n ) . Na remoção , o pior caso é quando o nó está em uma folha no nível mais baixo. Gasta-se a altura da árvore para encontrá-lo, em uma árvore de altura mínima, e algumas operações de atualização de ponteiros, gerando complexidade O ( log n ).

Árvore AVL Criada em 1962 por Adelson-Velsky e Landis, é uma árvore binária balanceada que obedece a todas as propriedades da árvore binária e em que cada nó apresenta diferença de altura entre as sub-árvores direita e esquerda de 1, 0 ou –1.

Árvore AVL

Se a diferença de altura entre as sub-árvores de um nó é maior que 1 ou menor que –1, a árvore está desbalanceada e haverá uma rotação.

Análise da complexidade O custo das operações é semelhante ao das árvores binárias. Ao se inserir um novo nó u, o pai desse nó (chamado v) terá a altura de uma de suas sub-árvores alterada. É necessário checar se a sub-árvore de raiz v está desbalanceada . Isso se faz subtraindo-se as alturas das duas sub-árvores de v, cujos valores estão armazenados no próprio nó v. Em caso de desbalanceamento, deve-se realizar uma rotação simples ou dupla.

Outros nós (além do v ) no caminho de v até a raiz podem também ficar desbalanceados e a verificação deverá ser feita. O percurso do nó até a raiz é feito em O ( log n ) passos . A exclusão de algum nó também pode ser feita em O ( log n ) passos . Depois, deve-se verificar se a árvore ficou desbalanceada e examinar os nós no caminho da raiz até alguma folha. O número de rotações necessárias pode alcançar a ordem O ( log n ) .
Tags