# -*- Python -*- import sys # different tree traversals # depth-first: inorder, preorder, postorder # tree representation: # [, , ] W = sys.stdout.write t = [4, [2, [1, None, None], [3, None, None]], [6, [5, None, None], [7, None, None]]] def make_tree (depth, counter): "make a complete binary tree" if depth == 0: value, counter[0] = counter[0], counter[0] + 1 return (value, None, None) else: l = make_tree (depth - 1, counter) value, counter[0] = counter[0], counter[0] + 1 r = make_tree (depth - 1, counter) return value, l, r t = make_tree (3, [1]) # 4261357 def breadth_first (t): todo = [t] while todo: top = todo.pop (0) W ('%s ' % top[0]) if top[1]: todo.append (top[1]) if top[2]: todo.append (top[2]) def depth_preorder (t): if t: [n, l, r] = t W ('%s ' % n) depth_preorder (l) depth_preorder (r) def depth_inorder (t): if t: [n, l, r] = t depth_inorder (l) W ('%s ' % n) depth_inorder (r) def depth_postorder (t): if t: [n, l, r] = t depth_postorder (l) depth_postorder (r) W ('%s ' % n) if __name__ == '__main__': W ('breadth\n') breadth_first (t) W ('\npreorder\n') depth_preorder (t) W ('\ninorder\n') depth_inorder (t) W ('\npostorder\n') depth_postorder (t) W ('\n')