git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1,014 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1,014 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| class Node(object):
 | |
|     # ctor :: a -> [a] -> Node(a)
 | |
|     def __init__(self, value, children=[]):
 | |
|         self.value = value
 | |
|         self.children = children
 | |
| 
 | |
| 
 | |
| # is_leaf :: Node(a) -> Boolean
 | |
| def is_leaf(node):
 | |
|     return len(node.children) == 0
 | |
| 
 | |
| 
 | |
| # enumerate :: Node(a) -> Set(List(a))
 | |
| def enumerate(node):
 | |
|     current = []
 | |
|     result = []
 | |
|     q = []
 | |
| 
 | |
|     q.append(node)
 | |
| 
 | |
|     while q:
 | |
|         x = q.pop()
 | |
|         print(x.value)
 | |
| 
 | |
|         for c in x.children:
 | |
|             q.append(c)
 | |
| 
 | |
|         current.append(x.value)
 | |
|         print(current)
 | |
| 
 | |
|         if is_leaf(x):
 | |
|             result.append(current)
 | |
|             print("Reseting current")
 | |
|             current = []
 | |
| 
 | |
|     return result
 | |
| 
 | |
| 
 | |
| node = Node('root', [
 | |
|     Node('a', [
 | |
|         Node('b', [Node('c')]),
 | |
|         Node('c', [Node('b')]),
 | |
|     ]),
 | |
|     Node('b', [
 | |
|         Node('a', [Node('c')]),
 | |
|         Node('c', [Node('a')]),
 | |
|     ]),
 | |
|     Node('c', [
 | |
|         Node('a', [Node('b')]),
 | |
|         Node('b', [Node('a')]),
 | |
|     ])
 | |
| ])
 | |
| 
 | |
| print('----------')
 | |
| print(enumerate(node))
 |