Printing a Tree data structure in Python Printing a Tree data structure in Python python 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)"'grandmother'\n\t'daughter'\n\t\t'granddaughter'\n\t\t'grandson'\n\t'son'\n\t\t'granddaughter'\n\t\t'grandson'\n">>> print root'grandmother'    'daughter'        'granddaughter'        'grandson'    'son'        'granddaughter'        'grandson'


Why don't 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>)