I found my "print binary tree" program, it is dated May 1993 using C language.
I simply modify it to solve this quiz.
The presentation format is not quite what we asked.


#----------------------------------------------------------------------------#
public

def to_s( )
  return "[empty heap]" if @heap.size <= 1
  result = ''
  root = 1
      
  if has_right?(root)
    print_node(result, ' ', true, right_index(root))
    result << " |\n"
  end
      
  result << "-o #{@heap[root]}\n"
      
  if has_left?(root)
    result << " |\n"
    print_node(result, ' ', false, left_index(root))
  end
      
  result
end
      
private
      
def left_index( index )  ; index * 2     ; end
def right_index( index ) ; index * 2 + 1 ; end
def has_left?( index )  ; left_index(index)  < @heap.size ; end
def has_right?( index ) ; right_index(index) < @heap.size ; end

def print_node( result, line, right, index )
  if has_right?(index)
    print_node(result, line + (right ? '  ' : '| '), true, right_index(index)) 
    result << "#{line}#{right ? ' ' : '|'} |\n"
  end
      
  result << "#{line}+-o #{@heap[index]}\n"
    
  if has_left?(index)
    result << "#{line}#{right ? '|' : ' '} |\n"
    print_node(result, line + (right ? '| ' : '  '), false, left_index(index))
  end
end
#----------------------------------------------------------------------------#

Some output:
   +-o 22
   |
 +-o 15
 | |
 | +-o 17
 |   |
 |   +-o 19
 |
-o 12
 |
 |   +-o 51
 |   |
 | +-o 23
 | | |
 | | +-o 26
 | |
 +-o 20
   |
   | +-o 40
   | |
   +-o 29
     |
     +-o 35

   +-o heap
   | |
   | +-o this
   |
 +-o data
 | |
 | | +-o the
 | | |
 | +-o of
 |   |
 |   +-o words
 |
-o another
 |
 |   +-o on
 |   |
 | +-o kind
 | | |
 | | +-o random
 | |
 +-o are
   |
   | +-o test
   | |
   +-o some
     |
     +-o to