I am using following code to show my 3 level menu:

   // will display the subpages of this top level page
   $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
    // diplays only the subpages of parent level
   //$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");

   if($post->ancestors) {
        // now you can get the the top ID of this page
        // wp is putting the ids DESC, thats why the top level ID is the last one
        $ancestors = end($post->ancestors);
        $children = wp_list_pages("title_li=&child_of=".$ancestors."&echo=0");
        // you will always get the whole subpages list

if ($children) { ?>
    <ul id="submenu">
        <?php echo $children; ?>
<?php } ?>

It lists pages in side bar, second level then 3rd level too. I must include top level too so i must my structure to appear as follow:


While above code isn't listing primary page i.e. *A, hopefully seem sensible and someone will have the ability to help


I discovered this code snippet in the wordpress codex site, and i believe it's precisely what you are searching for, I have copied and pasted it set for convenience:

//if the post has a parent
  //collect ancestor pages
  $relations = get_post_ancestors($post->ID);
  //get child pages
  $result = $wpdb->get_results( "SELECT ID FROM wp_posts WHERE post_parent = $post->ID AND post_type='page'" );
  if ($result){
    foreach($result as $pageID){
      array_push($relations, $pageID->ID);
  //add current post to pages
  array_push($relations, $post->ID); // <---- THIS IS INCLUDING THE PARENT
  //get comma delimited list of children and parents and self
  $relations_string = implode(",",$relations);
  //use include to list only the collected pages. 
  $sidelinks = wp_list_pages("title_li=&echo=0&include=".$relations_string);
  // display only main level and children
  $sidelinks = wp_list_pages("title_li=&echo=0&depth=2&child_of=".$post->ID);

if ($sidelinks) { ?>
  <h2><?php the_title() ;?></h2>
    //links in <li> tags
    <?php echo $sidelinks; ?>
<?php } ?>

Additionally, it has some built-in logic not to display everything if this sounds like a greatest-level page. Hope this can help!