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