图和二叉树的DFS(深度优先遍历)和BFS(广度优先遍历)

"""
图和二叉树的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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值