二叉树的遍历
深度优先
# 前序遍历
def pre_order(root):
if root is None:
return
print(root.data)
pre_order(root.left)
pre_order(root.right)
# 中序遍历
def in_order(root):
if root is None:
return
in_order(root.left)
print(root.data)
in_order(root.right)
# 后序遍历
def post_order(root):
if root is None:
return
post_order(root.left)
post_order(root.right)
print(root.data)
广度优先
利用队列可以实现非递归形式的广度优先遍历。
def bfs(root):
queue = []
res = []
queue.append(root.data)
while queue:
sz = len(queue)
for i in range(sz):
node = queue.pop(0)
res.append(node.data)
if node.left:
queue.append(node.left.data)
if node.right:
queue.append(node.right.data)