'Printing a Tree data structure in Python
I was looking for a possible implementation of tree printing, which prints the tree in a user-friendly way, and not as an instance of object.
I came across this solution on the net:
source: http://cbio.ufs.ac.za/live_docs/nbn_tut/trees.html
class node(object):
def __init__(self, value, children = []):
self.value = value
self.children = children
def __repr__(self, level=0):
ret = "\t"*level+repr(self.value)+"\n"
for child in self.children:
ret += child.__repr__(level+1)
return ret
This code prints the tree in the following way:
'grandmother'
'daughter'
'granddaughter'
'grandson'
'son'
'granddaughter'
'grandson'
Is it possible to have the same result but without changing the __repr__ method, because I am using it for another purpose.
EDIT:
Solution without modifying __repr__ and __str__
def other_name(self, level=0):
print '\t' * level + repr(self.value)
for child in self.children:
child.other_name(level+1)
Solution 1:[1]
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>)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Peilonrayz |
