Show all terms of a vocaboulary I have this function that I used in a similar situation (Drupal show all terms of different vocabulary) that prints the terms of a node with a corresponding parent (if applicable). In my template.php file:

function theme479_print_terms($node, $vid = NULL, $ordered_list = TRUE) {
     $vocabularies = taxonomy_get_vocabularies();
     if ($ordered_list) $output .= '&lt;ul&gt;'; //checks to see if you want an ordered list
     if ($vid) { //checks to see if you've passed a number with vid, prints just that vid
        $output = '&lt;div class="tags-'. $vid . '"&gt;';
        foreach($vocabularies as $vocabulary) {
         if ($vocabulary-&gt;vid == $vid) {
           $terms = taxonomy_node_get_terms_by_vocabulary($node, $vocabulary-&gt;vid);
           if ($terms) {
             $links = array();
             $output .= '&lt;span class="only-vocabulary-'. $vocabulary-&gt;vid . '"&gt;';
             if ($ordered_list) $output .= '&lt;li class="vocabulary-'. $vocabulary-&gt;vid . '"&gt;' . $vocabulary-&gt;name . ': ';
             foreach ($terms as $term) {
              // Check for terms parent, if found assign to $parent variable
              if ($get_parents = taxonomy_get_parents($term-&gt;tid, 'tid')) {
                foreach ($get_parents as $parents) {
                  $parent = $parents-&gt;name . '/';
                }
              }
               $links[] = '&lt;span class="term-' . $term-&gt;tid . '"&gt;' . l($parent . $term-&gt;name, taxonomy_term_path($term), array('rel' =&gt; 'tag', 'title' =&gt; strip_tags($term-&gt;description))) .'&lt;/span&gt;';
             }
             $output .= implode(', ', $links);
             if ($ordered_list) $output .= '&lt;/li&gt;';
             $output .= '&lt;/span&gt;';
           }
         }
       }
     }
     else {
       $output = '&lt;div class="tags"&gt;';
       foreach($vocabularies as $vocabulary) {
         if ($vocabularies) {
           $terms = taxonomy_node_get_terms_by_vocabulary($node, $vocabulary-&gt;vid);
           if ($terms) {
             $links = array();
             $output .= '&lt;ul class="vocabulary-'. $vocabulary-&gt;vid . '"&gt;';
             if ($ordered_list) $output .= '&lt;li class="vocabulary-'. $vocabulary-&gt;vid . '"&gt;' . $vocabulary-&gt;name . ': ';
             foreach ($terms as $term) {
              // Check for terms parent, if found assign to $parent variable
              if ($get_parents = taxonomy_get_parents($term-&gt;tid, 'tid')) {
                foreach ($get_parents as $parents) {
                  $parent = $parents-&gt;name . '/';
                }
              }
               $links[] = '&lt;span class="term-' . $term-&gt;tid . '"&gt;' . l($parent . $term-&gt;name, taxonomy_term_path($term), array('rel' =&gt; 'tag', 'title' =&gt; strip_tags($term-&gt;description))) .'&lt;/span&gt;';
             }
             $output .= implode(', ', $links);
             if ($ordered_list) $output .= '&lt;/li&gt;';
             $output .= '&lt;/ul&gt;';
           }
         }
       }
     }
     if ($ordered_list) $output .= '&lt;/ul&gt;';
     $output .= '&lt;/div&gt;';
     return $output;
}


I have this vocabulary structure:  


Foods  


Fruits  
Fruit_with_seeds



This function only shows:  


Fruits  


Fruit_with_seeds



Is it possible to show the entire hierarchy of a vocabulary?
I'm not sure what exactly you are looking for. The taxonomy terms for a node are normally nested inside $node-&gt;taxonomy. If you want all the terms "above" the terms inside the node, you should take a look at taxonomy_get_tree(). 
To the code above: I would urge you to seperate the tree-logic from the output; first create the array, then render the output.