当前位置: 首页 > news >正文

LeetCode 广度优先搜索(BFS)题解

LeetCode 广度优先搜索(BFS)题解

题目描述

广度优先搜索是一种用于遍历或搜索树或图的算法。该算法从根节点开始,先访问所有相邻节点,然后再访问这些相邻节点的相邻节点,以此类推,按照距离根节点的远近顺序进行遍历。

示例

对于以下树结构:

1 / \ 2 3 / \ 4 5

广度优先搜索的遍历顺序可以是:1 → 2 → 3 → 4 → 5。

解题思路

方法:广度优先搜索

思路

  • 广度优先搜索的核心思想是按照距离根节点的远近顺序进行遍历,先访问所有相邻节点,然后再访问这些相邻节点的相邻节点。
  • 对于树结构,广度优先搜索通常使用队列来实现,先将根节点入队,然后依次出队并将其相邻节点入队。
  • 对于图结构,广度优先搜索同样需要使用队列,并记录已访问的节点,以避免重复访问。

复杂度分析

  • 时间复杂度:O(V + E),其中 V 是顶点数,E 是边数。每个顶点和边都会被访问一次。
  • 空间复杂度:O(V),需要使用队列来存储待访问的节点,最坏情况下队列的大小为 V。

代码实现

方法:广度优先搜索(树的层序遍历)

# 定义树节点 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right # 广度优先搜索(层序遍历) def bfs_level_order(root): if not root: return [] result = [] queue = [root] while queue: level_size = len(queue) level = [] for _ in range(level_size): node = queue.pop(0) level.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) result.append(level) return result # 测试 def test_bfs_level_order(): # 构建树结构 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) # 测试层序遍历 print(bfs_level_order(root)) # 输出:[[1], [2, 3], [4, 5]] if __name__ == "__main__": test_bfs_level_order()

方法:广度优先搜索(图的遍历)

from collections import deque # 广度优先搜索(图的遍历) def bfs_graph(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: node = queue.popleft() print(node, end=' ') for neighbor in graph[node]: if neighbor not in visited: visited.add(neighbor) queue.append(neighbor) # 测试 def test_bfs_graph(): # 构建图结构 graph = { 'A': ['B', 'C'], 'B': ['A', 'D', 'E'], 'C': ['A', 'F'], 'D': ['B'], 'E': ['B', 'F'], 'F': ['C', 'E'] } # 测试图的遍历 print("BFS traversal starting from A:") bfs_graph(graph, 'A') # 输出:A B C D E F if __name__ == "__main__": test_bfs_graph()

测试用例

测试用例 1:树的层序遍历

输入:

1 / \ 2 3 / \ 4 5

输出:[[1], [2, 3], [4, 5]]

测试用例 2:图的遍历

输入:

A -- B -- D | | C -- F -- E

输出:A B C D E F

总结

广度优先搜索是一种重要的图论算法,它可以用于遍历树和图,以及解决许多相关问题,如最短路径查找、连通性判断等。通过队列的方式,广度优先搜索可以按照距离根节点的远近顺序进行遍历。

广度优先搜索的核心思想是:先访问所有相邻节点,然后再访问这些相邻节点的相邻节点,以此类推,按照距离根节点的远近顺序进行遍历。

掌握广度优先搜索的原理和实现,对于理解和解决图论相关问题非常重要。

http://www.jsqmd.com/news/715112/

相关文章:

  • 2026浏览器多开环境深度优化:虚拟指纹一致性与风控协同优化方案
  • 30倍提速!Ruff模块化架构如何拯救大型Python项目
  • 3步搞定Prometheus+Grafana监控可视化:从数据采集到告警通知终极指南
  • 境外投资备案代办供应商有哪些?优质企业多年行业经验,护航备案办理! - 速递信息
  • 微信聊天记录终极导出方案:3步免费备份你的珍贵回忆
  • 如何用MaaFramework在5分钟内构建你的第一个自动化测试项目:从零到一的完整指南
  • 面试必备:LeetCode HOT 100 分类刷题指南
  • FPGA新手避坑:用Verilog写边沿检测,为什么我仿真的波形总是不对?
  • 从汽车ACC到智能家居:LFMCW毫米波雷达是如何“看见”世界的?
  • 终极解决方案!Font Awesome 7图标误触难题:智能延迟激活技术完全指南
  • 游戏电竞护航陪玩源码系统小程序:从三角洲护航到俱乐部陪练的一站式开源平台方案 - 壹软科技
  • 揭秘阿里巴巴如何用PostCSS打造极速CSS处理系统:完整案例解析
  • 如何快速实现Spring Boot数据可视化:从零开始的图表报表生成指南
  • 2025年免费3D设计与建模认证:零基础到专业设计师的完整学习路径
  • 终极Python调试指南:掌握python-guide中的故障排除技巧与工具
  • 保姆级教程:在若依Vue前后端分离项目中,一步步集成Activiti7工作流引擎
  • Docker WASM在边缘计算中为何突然爆发?2024年头部厂商已全面落地的7个关键信号
  • 告别Verilog思维定式:SystemVerilog里logic、always_comb这些新语法到底怎么用才顺手?
  • 终极指南:Twitter推荐算法如何通过智能特征选择构建个性化体验
  • 企业家拓展香港业务哪家专业服务机构口碑好? - 速递信息
  • Mac Mouse Fix专业指南:解锁普通鼠标在macOS上的革命性效率提升
  • 预推免线下复试全记录:从华工、暨大到湖大,三天三城赶考的真实体验与避坑指南
  • 手把手教你用STM32CubeIDE实现Ymodem IAP升级(附完整代码与SecureCRT配置)
  • AI可视化编辑在线模板:零代码快速生成专业设计内容的实操指南
  • 内存管理新高度:uBlock Origin如何实现高效缓存与智能释放机制
  • 容器安全新范式:Windows inside Docker环境加固实战指南
  • 别再写复杂CEP代码了!用Flink SQL的MATCH_RECOGNIZE,5分钟搞定实时股票价格V型反转检测
  • 从单片机转FPGA,我踩过的那些坑和快速上手指南(基于Verilog和Vivado 2023)
  • 红石/阿金斯克/贝加尔湖 满洲里市金桥国际旅行社俄线出行参考 - 深度智识库
  • 2026年智能家居玻璃赛道深度解析:智能镜穿衣镜厂家推荐榜 - 深度智识库