• Nenhum resultado encontrado

Estrutura de Dados 10 – Árvores Binárias

N/A
N/A
Protected

Academic year: 2019

Share "Estrutura de Dados 10 – Árvores Binárias"

Copied!
53
0
0

Texto

(1)

Estrutura de Dados

(2)

• Introdução

• Árvores binárias

• Definição

• Implementação

• Ordens de percurso (caminhamentos)

• Árvores binária de busca (ABB)

• Definição

(3)

• Árvore

• Um conjunto de nós tal que:

• Existe um nó r, denominado raiz, com zero ou mais subárvores, cujas raízes estão ligadas a r

• Os nós raízes destas sebárvores são os filhos de r • Os nós internos da árvore são os nós com filhos

• As folhas ou nós externos da árvore são os nós sem filhos

(4)

• Uma árvore em que cada nodo tem zero, um ou dois

filhos, ou seja, de no máximo grau dois.

• Uma árvore binária é:

• Uma árvore vazia; ou

• Um nodo raiz com duas subárvores: - a subárvore da direita (sad)

- a subárvore da esquerda (sad)

(5)

• Além de ser uma árvore de

grau dois

ela é

ordenada

, ou seja, a ordem das subárvores

importa.

(6)

Estritamente Binária:

Cada nodo tem 0 ou dois filhos

Binária Completa

Toda folha está no último ou penúltimo nível

(7)

Árvore Binária Cheia:

É aquela em que, se n é um nó com alguma de suas subárvores vazias, então n se localiza no último nível. É uma árvore que tem todos os nodos internos com dois filhos e onde todas as folhas estão na mesma profundidade.

O número máximo de nodos para uma árvore binária cheia De altura k é:

(8)

Zigue-zague:

nodos interiores possuem exatamente uma

subárvore vazia.

(9)

Exemplo de aplicação de árvores binárias

- árvores binárias representando expressões aritméticas:

- Nós folhas representam operandos - Nós internos operadores

- Exemplo: (3 + 6)*(4 – 1)+5

(10)

Notação textual de uma árvore binária:

- A árvore vazia é representada por <> - Árvores não vazias por <raiz sae sad>

-Exemplo:

(11)

• Propriedade fundamental de árvores

• só existe um caminho da raiz para qualquer nó

Altura

de uma árvore

• Como realizar a implementação?

• a altura de uma árvore com um único nó raiz é zero • a altura de uma árvore vazia é -1

(12)

• Representação de uma árvore:

• Através de um ponteiro para o nó raiz

• Representação de um nó da árvores:

• Estrutura em C contendo

• A informação propriamente dita (exemplo: um caractere) • Dois ponteiros para as subárvores, à esquerda e à direita

(13)
(14)

• Implementação das funções:

- Implementação em geral recursiva

- Usa a definição recursiva da estrutura

• Uma árvore binária é:

- Uma árvore vazia; ou

- Um nó raiz com duas subárvores:

- A subárvore da direita (sad) - A subárvore da esquerda (sae)

(15)

• Função arv_criavazia

- Cria uma árvore vazia

(16)

• Função arv_cria

- Cria um nodo raiz dadas as informações e as duas subárvores, a da esquerda e da direita

- Retorna o endereço do nó raiz criado

(17)

• Função arv_criavazia e arv_cria

- As duas funções para a criação de árvores

representam os dois casos da definição

recursiva de árvore binária:

- Uma árvore binária Arv *a;

- é vazia a = arv_criavazia();

- É composta por uma raiz e duas subárvores

a = arv_cria(c, sae, sad)

(18)

• Função arv_libera

- Libera memória alocada pela estrutura da árvore

• As subárvores devem ser liberadas antes de se liberar o nó raiz

- Retorna uma árvore vazia, representada por NULL

(19)

• Função arv_imprime

- Percorre recursivamente a árvore, visitando todos os nós e imprimindo sua informação

(20)

• Exemplo:

criar a árvore <a<b<><d<><>>><c<e<><>><f<><>> > >

(21)

• Exemplo: acrescenta nós x, y e z

(22)

• Exemplo: libera nós

(23)

Pré-ordem:

- Trata raiz, percorre sae, percorre sad - Exemplo: a b d c e f

Ordem simétrica (ou In-Ordem):

- Percorre sae, trata raiz, percorre sad - Exemplo: b d a e c f

Pós-ordem:

(24)

• Pré-ordem:

(25)

• Ordem simétrica (ou In-Ordem):

(26)

• Pós-ordem:

(27)

• Fazer percurso de pré-ordem, in-ordem e

pós-ordem:

(28)

• Fazer percurso de pré-ordem, in-ordem e

pós-ordem:

• Pré-Ordem

+*+-36-415

• In-Ordem

(29)

Estrutura de Dados

(30)

• Uma árvore que se encontra organizada de tal

forma que:

• O valor associado à raiz é sempre maior que o valor associado a qualquer nó da subárvore à esquerda (sae) e

• O valor associado à raiz é sempre menor que o valor associado a qualquer nó da subárvore à direita (sad)

(31)

• Diferenciação

(32)

• Em uma ABB é possível encontrar

qualquer chave existente

caminhando na árvore:

• Compare o valor dado com o valor associado à raiz

• Se for igual, o valor foi encontrado

• Se for menor, a busca continua na sae • Se for maior, a busca continua na sad

(33)

• Os nós internos têm todos, ou quase todos,

dois filhos

• Qualquer nó pode ser alcançado a partir da

raiz em O(log n) passos

(34)

• Todos os nós têm apenas

um filho, com exceção da

(única) folha

• Qualquer nó pode ser

alcançado a partir da raiz

em O(n) passos

(35)

• A mesma estrutura de uma árvore binária.

• Dado que a definição de árvores é recursiva,

geralmente suas operações também são definidas

recursivamente

(36)

Criação:

Árvore vazia representada por NULL:

Impressão:

(37)

Busca:

- explora a propriedade de ordenação da árvore

- Possui desempenho computacional proporcional à altura (O(log n) para o caso de árvore balanceada)

(38)

Inserção:

- Recebe um valor v a ser inserido

- Retorna o eventual novo nó raiz da (sub)árvore - Para adicionar v na posição correta, faça:

- Se a (sub)árvore for vazia

- Crie uma árvore cuja raiz mantém v

- Se a (sub)árvore não for vazia

- Compare v com o valor na raiz

(39)

• Inserção:

(40)

• Inserção:

(41)

• Inserção:

(42)

• Inserção:

(43)

Remoção:

- Recebe um valor v a ser retirado

- Retorna a eventual nova raiz da árvore - Para remover v, faça:

- Se a árvore for vazia

- Nada tem de ser feito

- Se a árvore não for vazia

- Compare o valor armazenado no nó raiz com v

- Se for maior que v, retire o elemento da subárvore à esquerda

(44)

Remoção:

• Para retirar a raiz da árvore, há três casos:

• Caso 1: a raiz que é folha

• Caso 2: a raiz a ser retirada possui um único filho • Caso 3: a raiz a ser retirada tem dois filhos

(45)

Remoção de folha

• Caso 1: a raiz da subárvore é folha da árvore

original

• Libere a memória alocada pela raiz

• Retorne a raiz atualizada, que passa a ser NULL

(46)

Remoção de pai de filho único

• Caso 2: a raiz a ser retirada possui um único filho

• Libere a memória alocada pela raiz

• A raiz da árvore passa a ser o único filho da raiz

(47)

Remoção de pai de dois filhos

• Caso 3: a raiz a ser retirada tem dois filhos

• Encontre o nó N que precede a raiz na ordenação (o elemento mais à direita da subárvore à esquerda)

• Troque o dado da raiz com o dado de N

• Retire N da subárvore à esquerda (que agora contém o dado da raiz que se deseja retirar)

• Retire o nó N mais à direita é trivial, pois N é um nó folha ou N é um nó com um único filho (no caso, o filho da direita nunca existe)

(48)
(49)
(50)

• Remoção:

(51)

• Implemente funções para encontrar o menor e

o maior elemento de uma ABB.

- protótipo das funções:

int max (Arv *a);

int min (Arv *a);

(52)

• Implemente a semipresencial 5

(53)

Waldemar Celes, Renato Cerqueira, José Lucas

Rangel, Introdução a Estruturas de Dados,

Editora Campus (2004).

Referências

Documentos relacionados

 No estudo cinético a equação pseudo-segunda ordem foi a que melhor descreveu o processo de adsorção para as argilas in natura e modificadas, exibindo

O primeiro briefing, realizado foi no dia 30 de Setembro de 2013, foi um momento imprescindível para o desenvolvimento do estágio, tendo em conta que me foi

Constitui objeto do presente Edital a seleção e contratação de sociedade empresária especializada na execução de serviços de engenharia elétrica, visando a

Estudo do Meio (Descoberta das inter-relações entre espaços: o contacto entre a terra e o mar.. Exemplo de abordagem Articulação com conteúdos

Professores do 3º Ciclo e do Ensino Secundário da Esc.. Ação e formador Área Destinatários Modalidade e nº horas Calendarização. APRENDIZAGEM ATIVA COM RECURSO ÀS TIC

Puxe a alça lateral segurando pela fivela que você alcançou trazendo-a para baixo e cruzando suas costas até encontrar a outra parte da fivela que está no painel.. Feche a fivela

Visto que no Brasil esta aplicação em grande escala é praticamente nula, torna-se um atrativo acadêmico o estudo dos impactos da inserção de unidades

Um técnico em informática deverá executar as seguintes tarefas de apoio à comissão avaliadora, antes do início da prova: checagem prévia do funcionamento das