Vous êtes sur la page 1sur 8

Estruturas de Dados 2005/2006

62

Propriedades de Arvores Bin arias

Propriedade 1:Uma arvore bin aria com N n os internos tem, no m aximo, N+1 folhas Demonstra ca o: (Indu ca o Matem atica no n umero de n os) N=0 : Trivial! N = m : Hip otese de indu c ao Uma arvore bin aria com m n os internos tem, no m aximo, m + 1 folhas N > 0 : Uma arvore bin aria, T , com N n os internos ter a k deles na sub arvore esquerda (0 k N 1) e N k 1 na sub arvore direita. Usando a hip otese de indu ca o, a sub arvore esquerda possui 0 ne k + 1 folhas e a sub arvore direita possui 0 nd N k. Assim, temos, para o n umero de folhas de T , nt = ne + nd 0 nt (k + 1) + (N k) 0 nt N + 1

Estruturas de Dados 2005/2006

63

Propriedades de Arvores Bin arias Cont.

Propriedade 2: Uma arvore bin aria completa de altura h tem, exactamente, 2h+1 1 n os Demonstra ca o: (Indu ca o Matem atica na altura)

Propriedade 3: O n umero m aximo de n os de uma arvore bin aria de altura h e 2h+1 1. Demonstra ca o: 1 + 2 + 22 + . . . + 2h = 2h+1 1 q.e.d.

Estruturas de Dados 2005/2006

64

Propriedades de Arvores Bin arias Cont. da cont.

Qual a altura m nima de uma arvore bin aria com N n os? Seja h t.q. N 2h+1 1 1. Nenhuma arvore bin aria com altura inferior a h pode ter N n os. 2. Existe uma arvore bin aria de altura h com, exactamente, N n os. 3. Logo, h assim denido e a altura m nima para uma arvore bin aria possuir N n os: N 2h+1 1 = h log2 (N + 1) 1

Propriedade 4: A altura m nima para uma arvore bin aria com N n os e log2 (N + 1)

Estruturas de Dados 2005/2006

65

Arvores Bin arias de Pesquisa

#ifndef _SearchBTree_h #define _SearchBTree_h typedef struct elemSBT{ Item valor; struct elemSTB *fesq, *fdir; } ElemArvP, *ArvPesq; ArvPesq criar(); ArvPesq procura(Item X, ArvPesq T); ArvPesq minimo(ArvPesq T); ArvPesq maximo(ArvPesq T); void inserir(Item val, ArvPesq *T); void remover(Item val, ArvPesq *T); Item consulta(ArvPesq T); #endif

Estruturas de Dados 2005/2006

66

Arvores Bin arias de Pesquisa continua c ao


ArvPesq criar() {/* Cria uma arv. de pesq. vazia */ return NULL; } int vazia(ArvPesq T) {/* devolve True(1) sse T e vazia */ return T ? 0 : 1; } ArvPesq procura(Item X, ArvPesq T) {/* procura em T vertice com X */ if( vazia(T) ) return NULL; if( X < T->valor) return procura(X, T->fesq); if( X > T->valor) return procura(X, T->fdir); else return T; }

Estruturas de Dados 2005/2006

67

Arvores Bin arias de Pesquisa parte III

ArvPesq minimo(ArvPesq T) {/* procura o vertice com valor minimo */ if( vazia(T) ) return NULL; else if( vazia(T->fesq) ) return T; else return minimo(T->fesq); } ArvPesq maximo(ArvPesq T) {/* procura o vertice com valor maximo */ if( !vazia(T) ) while( !vazia(T->fdir) ) T = T->fdir; return T; }

Estruturas de Dados 2005/2006

68

Arvores Bin arias de Pesquisa Inserir

void inserir(Item val, ArvPesq *T); {/* insere o vertice com valor val (se nao existir) */ if( vazia(*T) ) *T = novo_no(val); // novo no com valor val e ponts nulos else if( val < (*T)->valor ) inserir(val, &(*T)->fesq); else if( val > (*T)->valor ) inserir(val, &(*T)->fdir); // senao val ja existe em T }

Estruturas de Dados 2005/2006

69

Arvores Bin arias de Pesquisa Remover


void remover(Item val, ArvPesq *T); { ArvPesq aux, minimo(); Item consulta(); /* remove o vertice com valor val */

if(!vazia(*T)) if(val < (*T)->valor) remover(val, &((*T)->fesq)); else if(val > (*T)->valor) remover(val, &((*T)->fdir)); else // encontrou if( !vazia((*T)->fesq) && !vazia((*T)->fdir) ) { aux = minimo((*T)->fdir); (*T)->valor = consulta(aux); remover((*T)->valor, (*T)->fdir); } else{ aux = *T; if(vazia((*T)->fesq)) *T = (*T)->fdir; else *T = (*T)->fesq; Libertar(aux); } }

Vous aimerez peut-être aussi