Predict the output
For the tree 8, 3, 10, 1, 6, -, 14, what does this print?
level = [8, 3, 10, 1, 6, None, 14]
def order(i: int, kind: str) -> list[int]:
if i >= len(level) or level[i] is None:
return []
v = level[i]
assert v is not None
left, right = order(2 * i + 1, kind), order(2 * i + 2, kind)
if kind == "pre":
return [v] + left + right
if kind == "in":
return left + [v] + right
return left + right + [v]
print(order(0, "in"), order(0, "post")[-1])Choose an answer, then open Show answer below to check it.
Show answer
Answer: A [1, 3, 6, 8, 10, 14] 8
Right: in-order of a search tree is sorted, and post-order ends at the root.
This tree is a search tree, so in-order gives sorted values, and every post-order walk finishes at the root.
Why not the others?
- B [8, 3, 1, 6, 10, 14] 8. That is pre-order: the root comes first.
- C [1, 3, 6, 8, 10, 14] 1. Post-order visits the root last, not first.
Illustrative
Text version
preorder:
Tree:
- 8
- 3 (left)
- 1 (left)
- 6 (right)
- 4 (left)
- 7 (right)
- 10 (right)
- 14 (right)
- 3 (left)
- Visit 8
- Visit 3
- Visit 1
- Visit 6
- Visit 4
- Visit 7
- Visit 10
- Visit 14
Result: [8, 3, 1, 6, 4, 7, 10, 14]. Order: 8, 3, 1, 6, 4, 7, 10, 14
inorder:
Tree:
- 8
- 3 (left)
- 1 (left)
- 6 (right)
- 4 (left)
- 7 (right)
- 10 (right)
- 14 (right)
- 3 (left)
- Visit 1
- Visit 3
- Visit 4
- Visit 6
- Visit 7
- Visit 8
- Visit 10
- Visit 14
Result: [1, 3, 4, 6, 7, 8, 10, 14]. Order: 1, 3, 4, 6, 7, 8, 10, 14
postorder:
Tree:
- 8
- 3 (left)
- 1 (left)
- 6 (right)
- 4 (left)
- 7 (right)
- 10 (right)
- 14 (right)
- 3 (left)
- Visit 1
- Visit 4
- Visit 7
- Visit 6
- Visit 3
- Visit 14
- Visit 10
- Visit 8
Result: [1, 4, 7, 6, 3, 14, 10, 8]. Order: 1, 4, 7, 6, 3, 14, 10, 8
level order:
Tree:
- 8
- 3 (left)
- 1 (left)
- 6 (right)
- 4 (left)
- 7 (right)
- 10 (right)
- 14 (right)
- 3 (left)
- Visit 8
- Visit 3
- Visit 10
- Visit 1
- Visit 6
- Visit 14
- Visit 4
- Visit 7
Result: [8, 3, 10, 1, 6, 14, 4, 7]. Order: 8, 3, 10, 1, 6, 14, 4, 7