hola, te mando la funcion es hijo modificada ya que la funcion es padre en principio la tienes bien aunq no se si e cambiado algo, miratela tb x si acaso, ok?
function eshijo (a:tipoarbolgen; nifcliente:tiponif; var encontrado:boolean):boolean;
  var
    aux:tipoarbolgen;
  begin
    eshijo:=false;
    aux:=a^.hijo;
    encontrado:=false;
    while (aux<>nil) and (not encontrado) do
      begin
        encontrado:=aux^.cliente.nif=nifcliente;   //compruebo si los nifs son iguales
        aux:=aux^.siguiente;
      end;
    eshijo:=encontrado;
  end;
y x si acaso la unidad padre:
function padre(a:tipoArbolGen; nifCliente:string):tipoArbolGen;
  var
    aux:tipoarbolgen;
    enc:boolean;
  begin
    aux:=a;
    padre:=nil;
    if eshijo (aux,nifcliente,enc) then
      padre:=aux
    else
      begin
        if not enc and (aux^.hijo<>nil) then
          padre:=padre (aux^.hijo,nifcliente);
        if not enc and (aux^.siguiente<>nil) then
          padre:=padre (aux^.siguiente,nifcliente);
      end;
  end;
gracias a ti tb xq me as dado ideas de como acer estas funciones q yo tb estaba un poco perdido... de todas formas el problema q tenias es q la funcion padre es recursiva xo la hijo no puede serlo nunk xq simplemente buscas entre todos sus hijos y ya esta...un saludo y espero q te haya servido de algo.