Estruturas de Dados - T.332

Capítulo 8
Árvores

8.2 Árvores de Busca 


8.2.1. Árvores (binárias) de Busca

Características de Árvores de Busca

Exemplo de Árvore de Busca Binária

Busca em
Árvores

nodo *localize ( chave : info, ptr : *nodo)
início
fim localize
Exercício

Construção: Inserção simples em árvore binária

inserção ( chave : info, ptr : *nodo)

Exemplo: Inserção de um elemento com chave 14

Eliminação em uma árvore de busca binária

Exemplo: Eliminação do Nodo com Chave 15


Eliminação em uma árvore de busca binária


Exemplo: Eliminação do Elemento com Chave 5


Eliminação em uma árvore de busca binária

Exemplo: Eliminação do Elemento com Chave 11


Algoritmo de Deleção em Árvore de Busca Binária

nodo *delete(info: tipo info, arv: *nodo)
        início
                tmp, filho: *nodo;
                se arvore == nulo então
                        retorne erro;
                senão 
                    se (info < arv ->info) // vá a esq.
                         arv->esq <- delete(info, arv->esq);
                         retorne arv;
                    senão 
                        se (info > arv ->info) // vá a dir.
                             arv->dir <- delete(info, arv->dir);
                             retorne arv;
                        senão // encontrei elemento que quero deletar.
                            se (arv->dir ~= nulo E arv->esq ~= nulo)// 2 fil
                                    tmp <- minimo(arv->dir);
                                    arv->info <- tmp->info;
                                    arv->dir <- delete(arv->info, arv->dir);
                                    retorne arv;
                            senão // um filho só
                                    tmp <- arv;
                                    se (arv->dir != nulo) então // um filho à dir.
                                        filho <- arv->dir;
                                        retorne filho;
                                    senão 
                                        se (arv->esq != nulo) então // filho esq.
                                            filho <- arv->esq;
                                            retorne filho;
                                        senão // folha
                                            libere arv;
                                            retorne nulo;
                                        fim se 
                                    fim se
                            fim se
                        fim se 
                    fim se
                fim se
        fim
Exercício

Problemas com Árvores Binárias

8.2.2 Árvores AVL

Árvores AVL

Árvores AVL: Inclusão com Rotação

No exemplo anterior, isto significa que, depois da inserção de 6.5, o nodo 8 ficou desbalanceado.


Exemplo: Criação de uma árvore AVL com os nós de 1 a 7

Árvores AVL: Inclusão com Rotação Simples

Árvores AVL: Inclusão do 6

Árvores AVL: Inclusão do 7

Árvores AVL: Inclusão com Rotação Dupla

Árvores AVL: Inclusão com Rotação Dupla

 

Árvores AVL: Inclusão com Rotação Dupla

 

Árvores AVL: Inclusão com Rotação Dupla

 

Árvores AVL: Inclusão do 14 com Rotação Dupla

 

Árvores AVL: Inclusão do 13 (rot.dupla)

 

Árvores AVL: Inclusão do 12

 

Árvores AVL: Inclusão do 11

 

Árvores AVL: Inclusão do 10,9,8


Árvores AVL: Inclusão com Rotação Dupla