class Node:
def __init__(self, name=None, parent=None, available=True):
self.name = name
self.parent = parent
self.available = available
self.children = []
def next_node(self):
return None # TODO
def print_tree(node, only_available=False):
todo = [node]
while todo:
node = todo.pop()
if only_available and not node.available:
continue
todo.extend(reversed(node.children))
print(node.name + (' (unavailable)' if not node.available else ''))
def traverse(node):
while True:
print(node.name)
node = node.next_node()
if not node:
break
grandparent = Node(name='grandparent')
parent0 = Node(name=' parent0')
parent1 = Node(name=' parent1')
parent2 = Node(name=' parent2', available=False)
parent3 = Node(name=' parent3')
child0 = Node(name=' child0', available=False)
child1 = Node(name=' child1', available=False)
child2 = Node(name=' child2', available=False)
child3 = Node(name=' child3')
child4 = Node(name=' child4')
child5 = Node(name=' child5')
child6 = Node(name=' child6', available=False)
grandchild0 = Node(name=' grandchild0')
grandchild1 = Node(name=' grandchild1')
grandchild2 = Node(name=' grandchild2')
grandparent.children = [parent0, parent1, parent2, parent3]
parent0.children = [child0, child1]
parent1.children = [child2, child3]
parent2.children = [child4]
parent3.children = [child5, child6]
child0.children = [grandchild0, grandchild1]
child3.children = [grandchild2]
print('Full node tree:\n')
print_tree(grandparent, only_available=False)
print('\n\nGoal sequence:\n')
print_tree(grandparent, only_available=True)
print('\n\nTraverse using Node.next_node() method (must be equal to "Goal sequence"):\n')
traverse(grandparent)