A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Fundamentos sobre Árvores Uma árvore é um conjunto finito de n nós com n > 0. Quando n = 0 temos uma árvore nula. Supondo que n > 0 temos uma árvore com.

Apresentações semelhantes


Apresentação em tema: "Fundamentos sobre Árvores Uma árvore é um conjunto finito de n nós com n > 0. Quando n = 0 temos uma árvore nula. Supondo que n > 0 temos uma árvore com."— Transcrição da apresentação:

1 Fundamentos sobre Árvores Uma árvore é um conjunto finito de n nós com n > 0. Quando n = 0 temos uma árvore nula. Supondo que n > 0 temos uma árvore com as seguintes características: Existe um nó especial chamado raiz; Os demais são particionados em T1, T2,....., TK estruturas disjuntas de árvores denominadas subárvore. Como as estruturas são disjuntas, garante-se que um nó não aparecerá em mais de uma subárvore.

2 a.Grau: Representa o número de subárvores de um nó. O nó a da árvore da figura tem grau 3. Já o nó h tem grau 2. b.Nó folha ou terminal: É o nó que possui grau 0, ou seja, não possui subárvores. Na figura, os nós e, g, k, l, m, i e j são folhas. c.Grau de uma árvore (n-aridade): É definido como sendo igual ao máximo dos graus de todos os seus nós. Na figura o grau da árvore é 3. d.Nós filhos: São as raízes das subárvores de um nó, e este nó é o pai delas. Considerando a figura, os nós e, f e g são filhos do nó b. O nó b, por sua vez, é filho do nó a. e.Nós irmãos: São os nós filhos que apresentam o mesmo pai (existe ainda nó ancestral, descendente, descendente esquerdo ou direito). Os nós e, f, e g, são nós irmãos, porque têm o mesmo pai b. f.Nível: Nível de um nó é sua distância da raiz da árvore. Como a raiz tem uma distância zero de si própria, diz-se que ela tem nível 0. Na figura os nós b, c e d estão no nível 1. Os nós e, f, g, h, i e j estão no nível 2.E, finalmente, os k, l e m estão no nível 3 g.Altura (também denominada por profundidade): É o nível do nó folha que tem o mais longo caminho até a raiz, somado um. Por definição, a altura de uma árvore vazia é -1. A altura da árvore da figura é 4. Observe a figura:

3 a c d i j h m l b g f e k Representação de uma Árvore Nível 0 Nível 1 Nível 2 Nível 3

4 Arvores Binárias Trata-se de uma árvore que pode ser nula ou apresentar as seguintes características: Um nó especial chamado raiz; Os demais nós são partiocinados em T 1, T 2 estruturas disjuntas de árvores binárias. A estrutura T 1 é chamada de subárvore esquerda e T 2 subárvore direita da raiz. Cada subárvore é também, por definição, uma árvore binária; Considerando que precisamos armazenar n nós em uma árvore binária, sua altura máxima é obtida por H max = n ; entretanto uma árvore binária com altura máxima é rara. Isso ocorre quando a árvore inteira é construída em uma única direção. A altura mínima é determinada por h max = (log 2 N) + 1 ; Dada a altura da árvore binária h, o número mínimo e máximo de nós é conseguido pelas fórmulas n min = h e n max = 2 h – 1 ; Árvores binárias estritamente binária: Ocorre quando todo nó que não é folha tiver subarvores esquerda e direita não vazias. Uma árvore estritamente binária com n folhas contém sempre 2n – 1 nós ; Árvore binária completa : È uma árvore estritamente binária de profundidade d, cujas folhas estejam no nível d. Considerando t n como o número total de nós em uma árvore binária completa de altura h, observamos a seguinte relação: T n = 2 h - 1 ; Uma árvore binária completa contém muitos nós, porém a distância do nó-raiz até qualquer folha (altura da árvore) pode ser considerada pequena.

5 Duas árvores binárias distintas com subárvores nulas A B A B

6 Árvore Estritamente Binária B A C D F E G

7 Árvore Binária completa de altura 4 D HI E JK F LM G NO B C A

8 Árvore de busca binária e ilustração das propriedades dessa Árvore b ac e df d Todos < x Todos x

9

10 Representação de um nó em uma árvore binária struct tree { char info; struct tree *esq, *dir; }; Typedef struct tree *TREEPTR;

11 void tInsere (TREEPTR *plist, char x) { if ( ( *plist) ==NULL) ( *plist=(TREEPTR) malloc (sizeof (struct tree) ) ; (*plist) ->info=x; (*plist)->esq=NULL; (*plist)->dir=NULL; } else{ if (x info){ tInsere (&((*plist)->esq),x); } else tInsere (&((*plist)->dir),x); }

12 Pesquisa de um elemento Se T é uma árvore nula, não há o que pesquisar Se a raiz de T armazena o elemento x, a solução é imediata Se x é menor que o valor da raiz de T, a busca prossegue na subarvore esquerda de T Se x é maior ou igual a T, a busca prossegue na subarvore direita de T

13 TREEPTR tPesq(TREEPTR *plist, char x) { if (*plist==NULL) /*elemento nao encontrado */ return (NULL) ; else if (x== (*plist)->info) /*elemento encontrado na raiz*/ return(*plist); else if (x info)/*procura-o numa subarvore*/ return(tPesq(&((*plist)->esq),x)); else return(tPesq(&((*plist)->dir),x)); }

14 Remoção de um elemento Se a raiz não possui filhos, a solução é imediata. Podemos removê-la e anular T Se a raiz possui um único filho,podemos remover o nó pai e o nó filho toma seu lugar Se a raiz possui dois filhos o nó com maior elemento à esquerda é removido. Seu elemento é colocado na raiz da árvore

15 Antes Depois t t (a) Remoção do nó (41) sem nenhum filho

16 Antes Depois tt (b) Remoção do nó (41) com nenhum filho à esquerda.

17 Antes Depois t t (b) Remoção do nó (15) com nenhum filho à direita.

18 Antes Depois t t (b) Remoção do nó (20) com 2 filhos. 11 5

19 TREEPTR tMaior (TREEPTR *plist) { TREEPTR t; t=*plist; if (t->dir=NULL) { *plist= (*plist)->esq; return (t); } else return (tMaior (&((*plist) ->dir)));

20 int tRemove (TREEPTR *plist, char *x) { TREEPTR p; if (*plist==NULL) return(1);/*elemento nao encontrado*/ if ((*x==(*plist)->info)==1) /*elemento encontrado na raiz*/ { p=*plist; if ((*plist)->esq==NULL) *plist=(*plist)-> dir; /* a raiz nao tem filho esquerdo*/ else if((*plist)->dir==NULL) *plist=(*plist)->esq; /* a raiz nao tem filho direito*/ /* a raiz tem ambos os filhos */ else { p=tMaior(&((*plist)->esq) ); (*plist) -> info=p ->info; } free (p); printf (\nElemento achado e removido) ; } else if ((*x info)==1) tRemove(&((*plist)->esq).x) ; /*procura na subarvore esquerda*/ else tRemove(&((*plist)->dir).x) ; /*procura na subarvore direita*/ }


Carregar ppt "Fundamentos sobre Árvores Uma árvore é um conjunto finito de n nós com n > 0. Quando n = 0 temos uma árvore nula. Supondo que n > 0 temos uma árvore com."

Apresentações semelhantes


Anúncios Google