Skip to content

Instantly share code, notes, and snippets.

@evaporei
Created June 24, 2024 18:34
Show Gist options
  • Save evaporei/ba25de6709cdcd4f82bb4a9ff7455605 to your computer and use it in GitHub Desktop.
Save evaporei/ba25de6709cdcd4f82bb4a9ff7455605 to your computer and use it in GitHub Desktop.
bst traversals
from collections import deque
class TreeNode[T]:
val: 'T'
left: 'TreeNode | None'
right: 'TreeNode | None'
def __init__(self, val: T, left=None, right=None):
self.val = val
self.left = left
self.right = right
# or preorder
def dfs(tree: TreeNode[str] | None):
if not tree:
return
print(tree.val, end=' ')
dfs(tree.left)
dfs(tree.right)
# per level
def bfs[T](tree: TreeNode[T] | None):
queue = deque([tree])
while queue:
# for each level
for _ in range(len(queue)):
node = queue.popleft()
if node:
print(node.val, end=' ')
queue.append(node.left)
queue.append(node.right)
def inorder[T](tree: TreeNode[T] | None):
if not tree:
return
inorder(tree.left)
print(tree.val, end=' ')
inorder(tree.right)
def postorder[T](tree: TreeNode[T] | None):
if not tree:
return
postorder(tree.left)
postorder(tree.right)
print(tree.val, end=' ')
# bfs F K D A H B E C G
# preorder = dfs F K A E C D H B G
# inorder E A C K F H D B G
# postorder E C A K H G B D F
example = TreeNode(
'F',
TreeNode(
'K',
TreeNode(
'A',
TreeNode('E'),
TreeNode('C')
),
None,
),
TreeNode(
'D',
TreeNode('H'),
TreeNode(
'B',
None,
TreeNode('G')
)
)
)
dfs(example)
print()
bfs(example)
print()
inorder(example)
print()
postorder(example)
print()
leetcode = TreeNode(
3,
TreeNode(9),
TreeNode(
20,
TreeNode(15),
TreeNode(7)
)
)
print()
dfs(leetcode)
print()
bfs(leetcode)
print()
inorder(leetcode)
print()
postorder(leetcode)
print()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment