How do you guys print out a binary tree?
Anthony Liu
antonyliu2002 at yahoo.com
Thu Apr 20 02:14:26 EDT 2006
Hi, Dave,
That looks nice, I'll definitely try it out.
--- Dave Hansen <iddw at hotmail.com> wrote:
> 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.
> --
> http://mail.python.org/mailman/listinfo/python-list
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Python-list
mailing list