"""
图和二叉树的DFS和BFS
"""
from collections import deque
def graph_dfs(g, s, v):
print(s, end=" ")
v[s] = True
for i in g[s]:
if not v[i]:
graph_dfs(g, i, v)
def graph_bfs(g, s):
q = deque([s])
v = set([s])
while q:
node = q.popleft()
print(node, end=" ")
for i in g[node]:
if i not in v:
q.append(i)
v.add(i)
g = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F', 'G'],
'D': ['B'],
'E': ['B'],
'F': ['C'],
'G': ['C']
}
v = {i: False for i in g}
print("图的DFS: ", end=" ")
graph_dfs(g, 'A', v)
print()
print("图的BFS: ", end=" ")
graph_bfs(g, 'A')
print()
class Er:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def er_dfs(root):
if root is None:
return
print(root.val, end=" ")
if root.left:
er_dfs(root.left)
if root.right:
er_dfs(root.right)
def er_bfs(root):
if root is None:
return
q = deque([root])
while q:
node = q.popleft()
print(node.val, end=" ")
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
# 构造二叉树
root = Er(1)
root.left = Er(2)
root.right = Er(3)
root.left.left = Er(4)
root.left.right = Er(5)
print("二叉树的DFS: ", end=" ")
er_dfs(root)
print()
print("二叉树的BFS: ", end=" ")
er_bfs(root)
print()
图和二叉树的DFS(深度优先遍历)和BFS(广度优先遍历)
最新推荐文章于 2024-08-30 12:42:13 发布