18dba95a2e 2011-09-13 brian: import pdb 18dba95a2e 2011-09-13 brian: 18dba95a2e 2011-09-13 brian: class Tree(): 029fd48614 2011-09-13 brian: def __init__(self, name): 18dba95a2e 2011-09-13 brian: self.nodes = [] 029fd48614 2011-09-13 brian: self.name = name 18dba95a2e 2011-09-13 brian: 18dba95a2e 2011-09-13 brian: def traverse_depth_first(self): 18dba95a2e 2011-09-13 brian: all_nodes = [] 18dba95a2e 2011-09-13 brian: for node in self.nodes: 18dba95a2e 2011-09-13 brian: if isinstance(node, Node): 18dba95a2e 2011-09-13 brian: all_nodes.append(node) 18dba95a2e 2011-09-13 brian: elif isinstance(node, Tree): 18dba95a2e 2011-09-13 brian: # pdb.set_trace() 18dba95a2e 2011-09-13 brian: all_nodes.extend(node.traverse_depth_first()) 18dba95a2e 2011-09-13 brian: return all_nodes 18dba95a2e 2011-09-13 brian: 18dba95a2e 2011-09-13 brian: def __str__(self): 18dba95a2e 2011-09-13 brian: return str(self.__unicode__()) 18dba95a2e 2011-09-13 brian: def __unicode__(self): 18dba95a2e 2011-09-13 brian: return self.nodes 18dba95a2e 2011-09-13 brian: 18dba95a2e 2011-09-13 brian: 18dba95a2e 2011-09-13 brian: class Node(): 18dba95a2e 2011-09-13 brian: def __init__(self, parent, data): 18dba95a2e 2011-09-13 brian: self.parent = parent 18dba95a2e 2011-09-13 brian: self.data = data 18dba95a2e 2011-09-13 brian: 18dba95a2e 2011-09-13 brian: def __str__(self): 18dba95a2e 2011-09-13 brian: return str(self.__unicode__()) 18dba95a2e 2011-09-13 brian: def __unicode__(self): 18dba95a2e 2011-09-13 brian: return self.data