Baixe o app para aproveitar ainda mais
Prévia do material em texto
PROGRAM PLISTAARV; USES CRT; TYPE PONTEIRO=^LISTADPENC; LISTADPENC=RECORD ESQ:PONTEIRO; DADO:INTEGER; DIR:PONTEIRO; END; PROCEDURE IMPRIMEARVORE(RAIZ:PONTEIRO;COL,LIN:BYTE); VAR DESLOQUE:BYTE; BEGIN GOTOXY(COL,LIN);//POSICIONE O CURSOR NA LINHA E COLUNA DESLOQUE:=TRUNC(30/(LIN*1.2)); //DESLOQUE A COLUNA COM BASE NESSE CALCULO (QUANTO MAIS //NUMEROS SE INSEREM MENOR O DESLOCAMENTO) IF RAIZ=NIL THEN WRITE('.') ELSE BEGIN WRITE(RAIZ^.DADO); IMPRIMEARVORE(RAIZ^.ESQ,COL-DESLOQUE,LIN+2); IMPRIMEARVORE(RAIZ^.DIR,COL+DESLOQUE,LIN+2); //NA MESMA LINHA E COM O MESMO DESLOCAMENTO //PARA A ESQUERDA OU DIREITA VOU ESCREVENDO //OS DADOS NA TELA END; END; PROCEDURE ALOCADADO(RAIZ, NOVOESPACO:PONTEIRO; NUMERO:INTEGER); BEGIN { PENSAR QUE AQUI VOU PROCURAR ONDE VOU FAZER A LIGACAO COM O PONTEIRO, ASSIM SE FOR MAIOR QUE A RAIZ VOU COLOCAR A LIGACAO A DIREITA OU A ESQUERDA, ASSIM CHAMO A PROCEDURE ALOCADADO VERIFICA SE A INFORMACAO A DIREITA OU A ESQUERDA EH MAIOR OU MENOR PARA A ALOCACAO DA NOVA INFORMACAO } IF NUMERO > RAIZ^.DADO THEN BEGIN IF RAIZ^.DIR = NIL THEN BEGIN RAIZ^.DIR:=NOVOESPACO; END ELSE BEGIN ALOCADADO(RAIZ^.DIR,NOVOESPACO, NUMERO); END; //DIREITA END ELSE BEGIN IF RAIZ^.ESQ = NIL THEN BEGIN IF RAIZ^.ESQ = NIL THEN BEGIN RAIZ^.ESQ:=NOVOESPACO; END END ELSE BEGIN ALOCADADO(RAIZ^.ESQ, NOVOESPACO, NUMERO); END; //ESQUERDA END; END; VAR RAIZ,AUX:PONTEIRO; VRINFO :INTEGER; BEGIN CLRSCR; VRINFO:=0; RAIZ:=NIL; WHILE VRINFO <> 999 DO BEGIN WRITELN('INFORME O NUMERO: '); READLN(VRINFO); IF VRINFO <> 999 THEN BEGIN NEW(AUX); AUX^.DADO:=VRINFO; AUX^.ESQ:=NIL; AUX^.DIR:=NIL; IF RAIZ <> NIL THEN BEGIN ALOCADADO(RAIZ,AUX , VRINFO); END; IF RAIZ=NIL THEN BEGIN RAIZ:=AUX; END; END; END; CLRSCR; IMPRIMEARVORE(RAIZ,40,1); READLN; END.
Compartilhar