Možná by bylo nejlepší to nejprve převést do stromové struktury:
Menu Top
|
Nodes with NULL p_id
|
Children
Můžete to udělat vytvořením třídy MenuNode, která má pole potomků. Nemusíte to tak dělat, ale výrazně to usnadní vytvoření rekurzivní funkce pro výstup nabídky.