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(node): print('Visiting node ' + node['name'] + '...') # Preorder depth-first search: #print('Checking if ' + node['name'] + ' is 8 letters...') #if len(node['name']) == 8: return node['name'] # BASE CASE if len(node['children']) > 0: # RECURSIVE CASE for child in node['children']: returnValue = find8LetterName(child) if returnValue != None: return returnValue # Postorder depth-first search: print('Checking if ' + node['name'] + ' is 8 letters...') if len(node['name']) == 8: return node['name'] # BASE CASE # Value was not found or there are no children. return None # BASE CASE print('Found an 8-letter name: ' + str(find8LetterName(root)))