root = {'data': 'A', 'children': [{'data': 'B', 'children': [{'data': 'D', 'children': []}]}, {'data': 'C', 'children': [{'data': 'E', 'children': [{'data': 'G', 'children': []}, {'data': 'H', 'children': []}]}, {'data': 'F', 'children': []}]}]} def postorderTraverse(node): if len(node['children']) > 0: # RECURSIVE CASE for child in node['children']: postorderTraverse(child) # Traverse child nodes. print(node['data'], end=' ') # Access this node's data. # BASE CASE return postorderTraverse(root)