Sería mejor convertir primero esto en una estructura de tipo árbol:
Menu Top
|
Nodes with NULL p_id
|
Children
Puede hacer esto creando una clase MenuNode que tenga una matriz de elementos secundarios. No tiene que hacerlo de esa manera, pero hará que sea mucho más fácil crear una función recursiva para generar el menú.