Professional Documents
Culture Documents
Definio
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 r, chamado raiz de T, e os ns restantes
podem ser divididos em dois subconjuntos disjuntos, Tre e
Trd, que so as sub-rvores esquerda e direita de r,
respectivamente e as quais, por sua vez, tambm so
rvores binrias.
Vantagens
Possuem um nmero constante de sub-rvores
em cada n
Limitao do nmero de ponteiros usados
A
dir
C
E
= ^TipoNo;
= record
chave: TipoChave;
{outros componentes...}
end;
TipoNo
= record
Reg: TipoItem;
esq, dir: Ponteiro;
end;
TipoArvoreBin = Ponteiro;
Melhorando a Busca... E se os ns da
rvore estivessem ordenados?
raiz
esq
C
dir
H
E
Melhorando a Busca... E se os ns da
rvore estivessem ordenados?
Procedure Busca_Binaria(p: TipoArvoreBin; item: TipoItem;
VAR pont: Ponteiro; VAR achou: boolean);
BEGIN
achou := FALSE;
while (NOT achou) AND (NOT Vazia(p)) do begin
if (p^.Item.Chave = x) then achou:= TRUE
else if p^.Item.Chave < x then
p := p^.dir
else p := p^.esq;
end;
Busca_Binaria:=p;
END;
Algoritmo bsico:
1. Se rvore vazia fim
2. visitar o n raiz
3. percorrer em pr-ordem a sub-rvore esquerda
4. percorrer em pr-ordem a sub-rvore direita
ABDCEGFHI
Percurso em Em Ordem
Algoritmo bsico:
1. Se rvore vazia fim
2. percorrer em ordem a sub-rvore esquerda
3. visitar o n raiz
4. percorrer em ordem a sub-rvore direita
DBAEGCHFI
Percurso em Ps-Ordem
Algoritmo bsico:
1. Se rvore vazia fim
2. percorrer em ordem a sub-rvore esquerda
3. percorrer em ordem a sub-rvore direita
4. visitar o n raiz
DBGEHIFCA
Exemplo:
Operao Esvaziar: esvaziar toda a rvore
Operao Nvel: Implementar uma funo para retornar o
nvel de um elemento na rvore
Observaes:
Supe-se que todas as chaves sejam diferentes
Procedure Percorrer
procedure Percorrer (ptr: TipoArvoreBin; var n: integer;
item: TipoItem; var achou:boolean);
begin
if ptr = nil then achou := FALSE
else begin
n:=n+1;
if (ptr^.Reg.Chave = item.Chave) then achou := TRUE
else begin
Percorrer (ptr^.esq, n, item, achou);
if (NOT achou) then
Percorrer (ptr^.dir, n, item, achou);
if (NOT achou) then n:=n-1;
end;
end;
end;
FIM