prioridad monticulo hacer estructura equilibrados ejemplos datos colas codigo busqueda binarios binario avl arboles arbol python python-2.7 printing tree

monticulo - Imprimir una estructura de datos de árbol en Python



hacer un arbol en python (2)

Estaba buscando una posible implementación de la impresión de árbol, que imprime el árbol de una manera fácil de usar, y no como una instancia de objeto.

Me encontré con esta solución en la red:

fuente: 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

Este código imprime el árbol de la siguiente manera:

''grandmother'' ''daughter'' ''granddaughter'' ''grandson'' ''son'' ''granddaughter'' ''grandson''

¿Es posible tener el mismo resultado pero sin cambiar el método __repr__ Porque lo estoy usando para otro propósito.

EDITAR:

Solución sin modificar __repr__ y __str__

def other_name(self, level=0): print ''/t'' * level + repr(self.value) for child in self.children: child.other_name(level+1)


Sí, mueva el código __repr__ a __str__ , luego llame a str() en su árbol o páselo a la instrucción de print . Recuerde usar __str__ en las llamadas recursivas también:

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>''

Manifestación:

>>> 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''


¿Por qué no lo almacena como un objeto treelib y lo imprime de manera similar a cómo imprimimos el árbol CHAID aquí con descripciones de nodos más relevantes relacionados con su caso de uso?

([], {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>)