Che bell'esecizietto! Adorabile la ricorsione, mi sono divertito a risolverlo (anche se c'è voluto più tempo a mettere i doppi apici intorno all'array recordset che a scrivere il codice):
Il codice prescinde dalla profondità delle categorie.
	Codice PHP:
	
<?php
//diciamo che esegui una query select * from menu order by struttura
$recordset=array(
"elettrodomestici",
"elettrodomestici>cucine>elettriche",
"elettrodomestici>cucine>gas",
"forni",
"forni>da incasso",
"forni>da incasso>a gas",
"forni>da incasso>elettrici",
"forni>esterni",
"forni>esterni>a gas",
"forni>esterni>elettrici",
"televisori",
"televisori>LED",
"televisori>LED>32 pollici",
"televisori>LED>40 pollici",
"televisori>plasma",
"televisori>plasma>32 pollici",
"televisori>plasma>40 pollici"
);
function addToMenu(&$menu,$voci){
    if(!is_null($voce =  array_pop($voci))){        
        if(!isset($menu[$voce]))            
            $menu[$voce]=array();        
        addToMenu($menu[$voce],$voci);
    }
}
function showMenu($menu,$indent){
    foreach ($menu as $key => $value) {
        printf("%{$indent}s","");
        printf($key."
");
        if(is_array($menu[$key]))
            showMenu($menu[$key],$indent+4);        
    }
}
$menu=array();
foreach ($recordset as $value) {//qui sostituisci con mysql_fetch_array
    $voci =  array_reverse(explode(">", $value));
    addToMenu($menu,$voci);
}
echo "<pre>";
showMenu($menu,0);
echo "</pre>";
?>
 
l'output prodotto:
	codice:
	elettrodomestici
    cucine
        elettriche
        gas
forni
    da incasso
        a gas
        elettrici
    esterni
        a gas
        elettrici
televisori
    LED
        32 pollici
        40 pollici
    plasma
        32 pollici
        40 pollici