'Print the dendrogram in ASCII art to standard out.
:param leaf_labels: an optional list of strings to use for labeling the
leaves
:type leaf_labels: list'

def show(self, leaf_labels=[]):

    (JOIN, HLINK, VLINK) = (u'+', u'-', u'|')
    if (len(self._items) > 1):
        root = _DendrogramNode(self._merge, *self._items)
    else:
        root = self._items[0]
    leaves = self._original_items
    if leaf_labels:
        last_row = leaf_labels
    else:
        last_row = [(u'%s' % leaf._value) for leaf in leaves]
    width = (max(map(len, last_row)) + 1)
    lhalf = (width // 2)
    rhalf = int(((width - lhalf) - 1))
    def format(centre, left=u'    ', right=u'    '):
        return (u'%s%s%s' % ((lhalf * left), centre, (right * rhalf)))
    def display(str):
        stdout.write(str)
    queue = [(root._value, root)]
    verticals = [format(u'    ') for leaf in leaves]
    while queue:
        (priority, node) = queue.pop()
        child_left_leaf = list(map((lambda c: c.leaves(False)[0]), node._children))
        indices = list(map(leaves.index, child_left_leaf))
        if child_left_leaf:
            min_idx = min(indices)
            max_idx = max(indices)
        for i in range(len(leaves)):
            if (leaves[i] in child_left_leaf):
                if (i == min_idx):
                    display(format(JOIN, u'    ', HLINK))
                elif (i == max_idx):
                    display(format(JOIN, HLINK, u'    '))
                else:
                    display(format(JOIN, HLINK, HLINK))
                verticals[i] = format(VLINK)
            elif (min_idx <= i <= max_idx):
                display(format(HLINK, HLINK, HLINK))
            else:
                display(verticals[i])
        display(u'\n')
        for child in node._children:
            if child._children:
                queue.append((child._value, child))
        queue.sort()
        for vertical in verticals:
            display(vertical)
        display(u'\n')
    display(u''.join((item.center(width) for item in last_row)))
    display(u'\n')
