ho risolto, grazie per gli aiuti




posto nel caso qualche disperato abbia bisogno della stessa cosa di cui io ho avuto bisogno:
Codice PHP:
// questo è il ciclo con cui scrivo le macrocategorie, quelle con padre 0 per intenderci
while ($row=mysql_fetch_assoc($res)){
  
$nodo 'nodo'.$i;
  
$isLast=(isLast($row["CATEGORIA_ID"]))?$pageProperties:$nodeProperties;
  $
$nodo=new HTML_TreeNodeXL($row["CATEGORIA"], "{$link}");
  
mostraAlbero($row["CATEGORIA_ID"], $$nodo$isLast);
  
$menu->addItem($$nodo);
  
$i++;
}

// e qui abbiamo la funzione mostraAlbero
function mostraAlbero($padre, &$nodo) {
   
$s="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID={$padre}";
   
$r=mysql_query($s)or die("$s
"
.mysql_error());
   global 
$pageProperties;
   global 
$nodeProperties;
    
   
$i=0;
   while (
$row=mysql_fetch_assoc($r)){
    
$i++;
    
$subNode='subNode'.$i;
    
$isLast=(isLast($row["CATEGORIA_ID"]))?$pageProperties:$nodeProperties;
    $
$subNode=&$nodo->addItem(new HTML_TreeNodeXL($row["CATEGORIA"], ""$isLast));
        
mostraAlbero($row["CATEGORIA_ID"], $$subNode);
    } 
}

// isLast è una semplice funzioncina che guarda solamente se il nodo interessato è una foglia oppure se ha a sua volta dei figli