root = {'name': 'Alice', 'children': [{'name': 'Bob', 'children': [{'name': 'Darya', 'children': []}]}, {'name': 'Caroline', 'children': [{'name': 'Eve', 'children': [{'name': 'Gonzalo', 'children': []}, {'name': 'Hadassah', 'children': []}]}, {'name': 'Fred', 'children': []}]}]}
def find8LetterName(root):
stack = [root]
while len(stack) != 0:
node = stack.pop()
print('Searching node ' + node['name'] + '...')
if len(node['name']) == 8:
return node['name']
for childNode in reversed(node['children']):
# Preorder depth-first search:
#stack.append(childNode)
# Postorder depth-first search:
stack.insert(0, childNode)
# Value was not found or there are no children.
return None # BASE CASE
print('Found an 8-letter name: ' + str(find8LetterName(root)))