Você está na página 1de 4

rvore Binria

http://www.icmc.usp.br/~sce182/arvbin.html

ndice > rvore > rvore Binria

Instituto de Cincias Matemticas de So Carlos Departamento de Computao e Estatstica SCE182 - Algoritmos e Estruturas de Dados 1 Profs. Resp.: Graa Pimentel e Maria Cristina

rvore Binria
Uma rvore Binria T um conjunto finito de elementos denominados ns ou vrtices, tal que: T = 0 e a rvore dita vazia ou existe um n especial r, chamado raiz de T, os restantes podem ser divididos em dois subconjuntos disjuntos, Tre e Trd, que so as subrvores esquerda e direita de r, respectivamente e as quais, por sua vez, tambm so rvores binrias.

Definio da Estrutura de Dados


Type PNo = ^no; no = record info: Telem; esq, dir: PNo; End; Type tree: PNo;

Operaes associadas ao TAD rvore binria padro:


Definir uma rvore vazia Criar um n raiz Verificar se rvore vazia ou no Criar um filho direita de um dado n

1 de 4

25/2/2008 20:33

rvore Binria

http://www.icmc.usp.br/~sce182/arvbin.html

Criar um filho esquerda de um dado n Verificar qual o nvel de um dado n Retornar o pai de um dado n 1. Definir uma rvore vazia Definir uma rvore vazia deve ser utilizado antes de qualquer outro.
Procedure Define(var t: tree); Begin t:=nil; End;

2. Criar um n raiz Retorna o n raiz da rvore em t


Procedure Cria_Raiz(var t: tree; item: Telem); Var no: tree; Begin new(n); no^.esq:=nil; no^.dir:=nil; no^.info:=item; t:=no; End;

3. Verificar se rvore vazia ou no Retorna true se rvore vazia, false c.c.


Function Vazia (t:tree):boolean; Begin vazia:=(t=nil); End;

4. Criar um filho direita de um dado n Busca elemento contendo Item_Pai Se Item_Pai ainda no possui filho direita, ento cria um filho sua direita com o contedo de item.
Procedure Adicionar_Dir(t: tree; item_pai, item: Telem) Var pai, no: tree; Begin pai:=Localiza(t,item_pai); If(pai<>nil) Then If (pai^.dir<>nil) Then erro("item j possui subrvore direita") Else Begin New(n); no^.esq:=nil; no^.dir:=nil; no^.info:=item; pai^.dir:=n; End; End;

5. Criar um filho esquerda de um dado n


Procedure Adicionar_Dir(t: tree; item_pai, item: Telem) Var pai, no: tree; Begin pai:=Localiza(t,item_pai); If(pai<>nil) Then If (pai^.esq<>nil) Then erro("item j possui subrvore direita") Else Begin

2 de 4

25/2/2008 20:33

rvore Binria

http://www.icmc.usp.br/~sce182/arvbin.html

New(n); no^.esq:=nil; no^.dir:=nil; no^.info:=item; pai^.esq:=n; End; End;

6. Verificar qual o nvel de um dado n Retorna o nvel onde est um n com item pesquisado Se item no existe retorna zero
Function Nvel (t: tree; item: Telem): integer; Var n: integer; achou:boolean; Procedure Travessia (ptr: tree; VAR niv: integer; item:Telem; VAR achou:boolean); Begin If ptr<>nil Then Begin niv:=niv+1; If Igual(ptr^.info, item) Then achou:=TRUE; Else Begin Travessia(ptr^.esq, niv, item, achou); If (NOT achou) then Travessia(ptr^.dir, niv, item, achou); If (NOT achou) Then niv:=niv-1; End; End; End; Begin {nvel} achou:= false; n:= 0; Travessia(t,n,item, achou); nivel:=n; End;

7. Retornar o pai de um dado n Dado um item, procura se item existe na rvore Caso positivo retorna o contedo do pai do n
Function Pai(t: tree; item:Telem):Telem; Var achou: boolean; it : Telem; Procedure Travessia(t: tree; item: Telem; var it: Telem; var achou:Boolean); Begin If not Vazia(t) Then Begin If t^.esq<>nil Then If Igual(item, t^.esq^.info) Then Begin achou:=true; it:=t^.info; End; If not achou Then If t^.dir<>nil Then If Igual(item, t^.dir^.info) Then Begin achou:=true; it:=t^.info; End;

3 de 4

25/2/2008 20:33

rvore Binria

http://www.icmc.usp.br/~sce182/arvbin.html

If not achou Then Travessia(t^.esq, item, it, achou); If not achou Then Travessia(t^.dir, item, it, achou); End; End; {Travessia} Begin {pai} If not Vazia(t) Then Begin achou:=false; If Igual(item, t^.info) Then pai:=t^.info; {pai do raiz ele prprio} Else Begin Travessia(t,item,it,achou); pai:=it; End; End; End;

Modos de Travessia

rvore

ndice

4 de 4

25/2/2008 20:33