How do you guys print out a binary tree?

Dave Hansen iddw at hotmail.com
Tue Apr 18 16:09:59 EDT 2006


On Tue, 18 Apr 2006 08:17:22 -0700 (PDT) in comp.lang.python, Anthony
Liu <antonyliu2002 at yahoo.com> wrote:

>
>
>--- bayerj <bayerj at in.tum.de> wrote:
>
>> Hi,
>> 
>> > 1   2   3   4   5
>> > 0   7   8   9   10
>> > 0   0   13  14  15
>> > 0   0   0   19  20
>> > 0   0   0   0   25
>> > Look at the triangle represented by the non-zero
>> > integers.  This triangle is a binary tree if we
>> take 5
>> > as the root and walk down on both sides.
>> 
>> Are you sure? Is 9  a child of 4 or 10? A binary
>> tree can have up to
>> 2^n - 1 nodes. A matrix can have up to n^2 values,
>> in your case of a
>> half-empty matrix about (n-1)^2.
>> 
>
>Thanks.  I am not concerned about the shape of binary
>tree.  So, let's forget about binary tree.  
>
>Given a triangle like that, it does not matter which
>is whose children.  How do we nicely present it as
>tree in an ascii console?

Something like the following might work.  Quick 2-minute script.
Probably needs tweaking to be generally useful

import sys
def print_tri(t):
    n = len(t)
    cell = 0
    for line in t:
        tw = max(map(lambda x:len(str(x)), line))
        if tw > cell:
            cell = tw
    for p in range(n,0,-1):
        sys.stdout.write("%*s"%(((cell+1)/2)*(2*p),""))
        x = 0
        y = p-1
        while y<n:
            s = str(t[x][y])
            b = (cell-len(s))/2
            sys.stdout.write("%*s%*s"%(b,s,cell-b,""))
            x += 1
            y += 1
        sys.stdout.write("\n")

Regards,
                                        -=Dave

-- 
Change is inevitable, progress is not.



More information about the Python-list mailing list