мне надо создать и вывести дерево ОЛП в таблице
все создается, но не выводитс изза рекурсии

Type
 ND = ^ NODE;
   NODE = RECORD
		 INF1 : string;
		 INF2 : STRING ;
		 LEFT : ND;
		 RIGHT : ND;
		END;
var
  q,root:ND;

procedure  obxod_OLP (q:nd); {prymoi}
var
npp:string;
begin
   form7.stringgrid1.rowcount:=2;
   form7.stringgrid1.ColCount:=3;
   form7.stringgrid1.Cells[0,0]:='№ п\п';
   form7.stringgrid1.Cells[0,0]:='Ключевой признак';
   form7.stringgrid1.Cells[1,0]:='Информация';
   if q <> nil
   then begin
        inc(k);
        form7.stringgrid1.rowcount:= form7.stringgrid1.rowcount+1;
        inc(k);
        str(k,npp);
        form7.stringgrid1.Cells[0,k]:=npp;
        form7.stringgrid1.Cells[1,k]:= q^.inf1;
        form7.stringgrid1.Cells[2,k]:=q^.inf2;
        obxod_OLP( q^.LEFT );
        obxod_OLP( q^.RIGHT );
     end;
end;

получается что выводит только последний элемент
что и где изменить? или как сделать без рекурсии??!!

2) и вот еще подсчет количества узлов дерева:
PROCEDURE yzel_COUNT(root:ND; VAR K:INTEGER );
BEGIN
   IF root<>NIL
   THEN BEGIN
                   p:=root;
	   IF not(p^.LEFT=NIL) AND not(p^.RIGHT=NIL)
	   THEN K:=K+1;
                   yzel_COUNT(p^.LEFT,K );
	   yzel_COUNT(p^.RIGHT, K );
	END;
end;

procedure TForm6.RadioButton1Click(Sender: TObject);
var s: string;
    k: integer;
begin
        k:=0;
        yzel_count(root,k);
        s:=' Количество узло = ' + inttostr(k);
        if k=0
        then showmessage ('Дерево пусто')
        else showmessage (s);
end;


получается к=0 и выводит что дерево пусто
заранее спасибо