Printing a Tree data structure in Python
Printing a Tree data structure in Python
Yes, move the __repr__
code to __str__
, then call str()
on your tree or pass it to the print
statement. Remember to use __str__
in the recursive calls too:
class node(object):
def __init__(self, value, children = []):
self.value = value
self.children = children
def __str__(self, level=0):
ret = t*level+repr(self.value)+n
for child in self.children:
ret += child.__str__(level+1)
return ret
def __repr__(self):
return <tree node representation>
Demo:
>>> root = node(grandmother)
>>> root.children = [node(daughter), node(son)]
>>> root.children[0].children = [node(granddaughter), node(grandson)]
>>> root.children[1].children = [node(granddaughter), node(grandson)]
>>> root
<tree node representation>
>>> str(root)
grandmotherntdaughternttgranddaughternttgrandsonntsonnttgranddaughternttgrandsonn
>>> print root
grandmother
daughter
granddaughter
grandson
son
granddaughter
grandson
Why dont you store it as a treelib object and print it out similar to how we print the CHAID tree out here with more relevant node descriptions related to your use case?
([], {0: 809, 1: 500}, (sex, p=1.47145310169e-81, chi=365.886947811, groups=[[female], [male]]))
├── ([female], {0: 127, 1: 339}, (embarked, p=9.17624191599e-07, chi=24.0936494474, groups=[[C, <missing>], [Q, S]]))
│ ├── ([C, <missing>], {0: 11, 1: 104}, <Invalid Chaid Split>)
│ └── ([Q, S], {0: 116, 1: 235}, <Invalid Chaid Split>)
└── ([male], {0: 682, 1: 161}, (embarked, p=5.017855245e-05, chi=16.4413525404, groups=[[C], [Q, S]]))
├── ([C], {0: 109, 1: 48}, <Invalid Chaid Split>)
└── ([Q, S], {0: 573, 1: 113}, <Invalid Chaid Split>)