T Node Int data Node? left Node? right F (data, Node? left = N, Node? right = N) .data = data .left = left .right = right F preorder(visitor) -> Void visitor(.data) I .left != N .left.preorder(visitor) I .right != N .right.preorder(visitor) F inorder(visitor) -> Void I .left != N .left.inorder(visitor) visitor(.data) I .right != N .right.inorder(visitor) F postorder(visitor) -> Void I .left != N .left.postorder(visitor) I .right != N .right.postorder(visitor) visitor(.data) F preorder2(&d, level = 0) -> Void d[level].append(.data) I .left != N .left.preorder2(d, level + 1) I .right != N .right.preorder2(d, level + 1) F levelorder(visitor) DefaultDict[Int, [Int]] d .preorder2(&d) L(k) sorted(d.keys()) L(v) d[k] visitor(v) V tree = Node(1, Node(2, Node(4, Node(7, N, N), N), Node(5, N, N)), Node(3, Node(6, Node(8, N, N), Node(9, N, N)), N)) F printwithspace(Int i) print(‘#. ’.format(i), end' ‘’) print(‘ preorder: ’, end' ‘’) tree.preorder(printwithspace) print() print(‘ inorder: ’, end' ‘’) tree.inorder(printwithspace) print() print(‘ postorder: ’, end' ‘’) tree.postorder(printwithspace) print() print(‘levelorder: ’, end' ‘’) tree.levelorder(printwithspace) print()