72 lines
1.6 KiB
Text
72 lines
1.6 KiB
Text
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()
|