【经验分享】数据结构——总结,图的深度优先遍历(DFS)和广度优先遍历(BFS)与二叉树遍历的比较

目录

直接记结论

深度优先遍历(DFS)

定义

与二叉树遍历的类比

广度优先遍历(BFS)

定义

与二叉树遍历的类比

总结


🌈 嗨,我是命运之光

🌌 2024,每日百字,记录时光,感谢有你,携手前行~

🚀 携手启航,我们一同深入未知的领域,挖掘潜能,让每一步成长都充满意义。


直接记结论

图是一种常见的数据格式,它的遍历主要分为两种:

深度优先遍历(DFS):类似于二叉树的前序前序遍历

广度优先遍历(BFS):类似于二叉树的层次遍历


深度优先遍历(DFS)

定义

深度优先遍历(DFS,Depth-First Search)是一种图遍历算法,它沿着图的深度方向进行搜索。DFS 从一个起始节点开始,优先访问未被访问的邻接节点,尽可能深地探索每个分支,直到所有可能的分支都被访问过,然后回溯到上一个节点继续探索。

与二叉树遍历的类比
  • 前序遍历(Pre-order Traversal):在二叉树中,前序遍历的顺序是“访问节点 → 访问左子树 → 访问右子树”。这个过程与 DFS 的过程非常相似,因为 DFS 也首先访问当前节点(或顶点),然后递归地访问所有未被访问的邻接节点。

    类比解释: 在 DFS 中,节点被处理的顺序类似于前序遍历中的顺序,DFS 首先处理当前节点,然后递归地探索每个子节点。

广度优先遍历(BFS)

定义

广度优先遍历(BFS,Breadth-First Search)是一种图遍历算法,它沿着图的广度方向进行搜索。BFS 从一个起始节点开始,逐层访问所有邻接节点,然后继续访问这些邻接节点的邻接节点,直到图中的所有节点都被访问过。

与二叉树遍历的类比
  • 层次遍历(Level-order Traversal):在二叉树中,层次遍历按层访问所有节点。首先访问树的根节点,然后访问第二层节点,再访问第三层节点,以此类推。这个过程与 BFS 非常相似,因为 BFS 按层访问图的所有节点。

    类比解释: 在 BFS 中,节点被访问的顺序类似于层次遍历中的顺序,BFS 逐层访问节点,每一层对应树的某一层。

例题

图的深度优先遍历类似于二叉树的( )。

A. 先序遍历

B. 中序遍历

C. 后序遍历

D. 层次遍历

题解 

选A。图的深度优先遍历相当于 二叉树的前序遍历,因为它在访问节点时首先处理节点本身,然后递归地访问所有子节点。尽管 DFS 可以应用于任意图结构,而不仅限于树,但其遍历节点的顺序与二叉树的前序遍历最为接近。

总结

  • 深度优先遍历(DFS)前序遍历 类似,因为它们都优先访问当前节点,然后递归地访问所有未被访问的邻接节点。
  • 广度优先遍历(BFS)层次遍历 类似,因为它们都按层次访问图中的节点,逐层展开,直到遍历完整个图。


嗨,我是命运之光。如果你觉得我的分享有价值,不妨通过以下方式表达你的支持:👍 点赞来表达你的喜爱,📁 关注以获取我的最新消息,💬 评论与我交流你的见解。我会继续努力,为你带来更多精彩和实用的内容。

点击这里👉 ,获取最新动态,⚡️ 让信息传递更加迅速。

  • 36
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
叉树广度优先BFS)可以使用队列来实现,具体步骤如下: 1. 创建一个空队列,并将根节点入队。 2. 当队列不为空时,执行以下操作: - 出队一个节点,将其值存储或打印。 - 将出队节点的左子节点入队(如果存在)。 - 将出队节点的右子节点入队(如果存在)。 3. 重复步骤2,直到队列为空。 下面是一个Python实现的示例代码: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def bfs(root): if not root: return [] result = [] queue = [root] while queue: node = queue.pop(0) result.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return result ``` 对于深度优先DFS),有两种常用的方法:前序遍、中序遍和后序遍。下面以前序遍为例进行解释。 前序遍的顺序是:根节点 -> 左子树 -> 右子树。具体实现步骤如下: 1. 创建一个空列表,用于存储遍结果。 2. 定义一个辅助函数,接收一个节点作为参数: - 若节点为空,返回。 - 将节点的值存储或打印。 - 递归调用辅助函数遍节点的左子树。 - 递归调用辅助函数遍节点的右子树。 3. 调用辅助函数,将根节点作为参数传入。 下面是一个Python实现的示例代码: ```python def dfs(root): if not root: return [] result = [] def helper(node): if not node: return result.append(node.val) helper(node.left) helper(node.right) helper(root) return result ``` 这样,你就可以使用这两个函数来实现二叉树广度优先深度优先了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运之光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值