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