56 lines
1,014 B
Python
56 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))
|