sembrava interessante anche a me 
poi comunque ho risolto, ma mi sono dimenticato di postare lol
è bastato fare una funzione ricorsiva al contrario, cioè di solito usavo la ricorsione per costruire l'albero partendo dal primo nodo, mentre ora dovevo partire dall'ultimo. Si trattava di costruirlo conoscendo solo l'ultimo figlio, ossia richiamavo la stessa funzione finché non trovavo il nodo con PADRE_ID=0
Questa è la funzione che mi ono costruito:
codice:
/**
* crea un array di id del percorso fino ad arrivare all'ultimo selezionato
* l'array conterrà il percorso di id per arrivare al figlio selezionato
*
* @param int $foglia, id dell'ultimo selezionato da cui ricavare il percorso
* @param array $array, array contenente il percorso di id
*
* @return array $array, array completo con il percorso da padre a figlio
*/
function creaID($foglia, $array)
{
$foglia=(int)$foglia;
if (sizeof($array)==0)
{
$array[0]=$foglia;
}
$sql="SELECT CATEGORIA_PADRE_ID FROM CATEGORIE WHERE CATEGORIA_ID=".$foglia;
$res=mysql_query($sql)or die(mysql_error());
$row=mysql_fetch_assoc($res);
if ($row["CATEGORIA_PADRE_ID"]>0)
{
array_unshift($array,$row["CATEGORIA_PADRE_ID"]);
$array=creaID($row["CATEGORIA_PADRE_ID"],$array);
}
return $array;
} // end function creaID
praticamente la prima chiamata passerai ovviamente oltre all'id di tuo interesse un array vuoto che ti ritrovera riempito alla fine.
Io per comodità l'array l'ho riempito aggiungendo sempre in testa, in modo poi da ritrovarmi con il percorso "corretto" ossia partendo dal nodo padre fino al nodo in questione, ma nulla ti vieta di farlo al contrario.
spero possa esserti utile