Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Estrutura de árvore, Notas de aula de Algoritmos e Programação

Aula de estrutura de dados tipo árvore

Tipologia: Notas de aula

2019

Compartilhado em 14/09/2019

weslei-santos-4
weslei-santos-4 🇧🇷

1 documento

1 / 44

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Estruturas de Dados
Aula 15: Árvores
17/05/2011
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c

Pré-visualização parcial do texto

Baixe Estrutura de árvore e outras Notas de aula em PDF para Algoritmos e Programação, somente na Docsity!

Estruturas de Dados

Aula 15: Árvores

Fontes Bibliográficas • Livros:

  • Introdução a Estruturas de Dados (Celes,

Cerqueira e Rangel):

Capítulo 13;

  • Projeto de Algoritmos (Nivio Ziviani):

Capítulo 5;

  • Estruturas de Dados e seus Algoritmos

(Szwarefiter, et. al):

Capítulo 3;

(Szwarefiter, et. al):

Capítulo 3;

  • Algorithms in C (Sedgewick):

Capítulo 5;

  • Slides baseados no material da PUC-Rio,

disponível em http://www.inf.puc-rio.br/~inf1620/.

Definição Recursiva de Á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 sub-á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

Formas de representação •^

Representação por parênteses aninhados^ –

( A (B) ( C (D (G) (H)) (E) (F (I))))^ Diagrama de Inclusão

Representação Hierárquica

Exemplo (árvore de expressão) •^

Representação da expressão aritmética:^ (a + (b * (c / d - e)))

Conceitos Básicos •^

Nós filhos, pais, tios, irmãos e avô

-^

Grau de saída (número de filhos de um nó)

-^

Nó folha (grau de saída nulo) e nó interior

(grau de

saída diferente de nulo)

-^

Grau de uma árvore (máximo grau de saída)

-^

Floresta (conjunto de zero ou mais árvores)

Conceitos Básicos (3) •^

Nível da raiz (profundidade) é 0.

-^

Árvore Ordenada: é aquela na qual filhos de cada nóestão ordenados. Assume-se ordenação da esquerdapara a direita. Esta árvore é ordenada?

Conceitos Básicos (4) •^

Árvore Cheia: Uma árvore de grau d é uma árvore cheiase possui o número máximo de nós, isto é, todos os nóstêm número máximo de filhos exceto as folhas, e todasas folhas estão na mesma altura.

-^

Árvore cheia de grau 2: implementação sequencial. Armazenamento por nível: posição do nó

posição dos filhos do nó

1

2,

2

4,

3

6,

i^

(2i,2i+1)

Árvores Binárias •^

Notação textual^ – a árvore vazia é representada por <>– árvores não vazias por

-^

Exemplo:^ – <a <b <> <d<><>> > <c <e<><>> <f<><>>> >

Árvore Binária •^

Uma árvore em que cada nó tem zero, um ou dois filhos

-^

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)

TAD Árvores Binárias – Impl. em C (arv.h)

typedef

struct

arv

Arv;

//Cria

uma

árvore

vazia

Arv*

arv_criavazia

(void);

//cria

uma

árvore

com

a^

informação

do

raiz

c ,

e

//com

subárvore

esquerda

e

e

subárvore

direita

d

Arv*

arv_cria

(char

c,

Arv*

e,

Arv*

d);

//libera

o^

espaço

de

memória

ocupado

pela

árvore

a

//libera

o^

espaço

de

memória

ocupado

pela

árvore

a

Arv*

arv_libera

(Arv*

a);

//retorna

true

se

a^

árvore

estiver

vazia

e

false

//caso

contrário

int

arv_vazia

(Arv*

a);

//indica

a^

ocorrência

ou

não

do

caracter

c

int

arv_pertence

(Arv*

a,

char

c);

//imprime

as

informações

dos

nós

da

árvore

void

arv_imprime

(Arv*

a);

TAD Árvores Binárias – Implementação em C •^

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 direita (sad)
    • a sub-árvore da esquerda (sae)

TAD Árvores Binárias – Implementação em C •^

função arv_cria^ – cria um nó raiz dadas a informação e as duas sub-árvores,

a da esquerda e a da direita

  • retorna o endereço do nó raiz criado Arv*

arv_cria

(char

c,

Arv*

sae,

Arv*

sad){

Arv*

p=(Arv)malloc(sizeof(Arv));*

Arv*

p=(Arv)malloc(sizeof(Arv));*

p->info

c;

p->esq

sae;

p->dir

sad;

return

p;

TAD Árvores Binárias – Implementação em C • arv_criavazia e arv_cria

  • as duas funções para a criação de árvores

representam os dois casos da definição recursivade árvore binária:^ • uma árvore binária Arv* a;

  • é vazia a=arv_criavazia() –^

é composta por uma raiz e duas sub

  • árvores -^

é composta por uma raiz e duas sub

  • árvores

a=arv_cria(c,sae,sad);