program arvorebin; uses crt; type Elem = string; ArvB = ^Nodo; Nodo = record esq: ArvB; objeto: Elem; dir: ArvB; end; var valor: string[15]; T: ArvB; ch: char; procedure Tinserir(var T: ArvB; X: Elem); begin if T = nil then begin new(T); T^.objeto := X; T^.esq := nil; T^.dir := nil; end else if X < T^.objeto then Tinserir(T^.esq, X) else Tinserir(T^.dir, X); end; procedure Tfnd(var T: ArvB; X: Elem); begin if T = nil then WriteLn('Elemento nao encontrado!') { elemento nao encontrado } else if X = T^.objeto then { elemento encontrado na raiz - nodo atual } WriteLn('Elemento ', T^.objeto, ' encontrado!') else if X < T^.objeto then { elemento encontrado numa das sub-arvores } begin WriteLn(T^.objeto, ' -> Esquerda'); Tfnd(T^.esq, X); end else begin WriteLn(T^.objeto, ' -> Direita'); Tfnd(T^.dir, X); end; end; { programa principal } begin repeat ClrScr; Write('[I]ncluir, [C]onsultar ou [F]im ? '); repeat ch := UpCase(ReadKey); until ch in ['I', 'C', 'F']; if ch = 'I' then begin ClrScr; Write('Elemento: '); ReadLn(valor); end; case ch of 'I': Tinserir(T, valor); 'C': begin ClrScr; Write('Elemento: '); ReadLn(valor); Tfnd(T, valor); readkey; { if erro = SUCESSO then begin ClrScr; Write('Valor: ', valor); ReadLn; end; } end; end; { if (erro <> SUCESSO) and (ch <> 'F') then begin ClrScr; case erro of FILA_CHEIA: WriteLn('Erro: lista cheia'); FILA_VAZIA: WriteLn('Erro: lista vazia'); end; ReadLn; end; } until ch = 'F'; ClrScr; end.