前序遍历(根-左-右)
# 递归
def preorder(root):
if not root: return []
return [root.val] + preorder(root.left) + preorder(root.right)
# 迭代
def preorder_iter(root):
stack, res = [root], []
while stack:
node = stack.pop()
if node:
res.append(node.val)
stack.extend([node.right, node.left])
return res
层序遍历(BFS)
from collections import deque
def level_order(root):
if not root: return []
queue, res = deque([root]), []
while queue:
level = []
for _ in range(len(queue)):
node = queue.popleft()
level.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
res.append(level)
return res