dfs时间复杂度_DFS(深度优先搜索)了解一下?

本文介绍了深度优先搜索(DFS)的基本概念和应用场景,通过递归和栈实现DFS,并通过两道算法题展示了DFS的解题思路。强调了DFS的时间复杂度和空间复杂度通常为O(N),并鼓励逐步深化理解,快乐编程。
摘要由CSDN通过智能技术生成

18a158c3d3084e24e8b0aadd86f365eb.png

稍微了解一点的人都知道,当我们需要从一个树结构中寻找到一些符合条件的元素时,我们都知道通过广度优先搜索或者深度优先搜索来有效地解决问题。那么具体是怎样一种手段去搜索呢?广度优先搜索(BFS)我们之前已经聊过了,现在我们就来谈谈深度优先搜索(DFS)。

DFS在某种程度上跟BFS很像,他们只是在侧重层级还是深度上有所区分。一般在做深度优先搜索的时候我们都选择使用递归的方式,除此外我们也可以像BFS一样使用辅助数据结构,比如说栈。所以通常我们的的深度优先搜索算法的空间复杂度都在O(H),这个H指的是树的深度。

老规矩,我们先来看一道需要用深度优先搜索解决的简单算法题:给定一个二叉树和一个数字“S”,判断是否存在从根节点到叶节点这样一个路径,使得这个路径上所有节点的和等于S。

从根节点到叶节点,这是典型的DFS题目。为了找到这样的路径,我们只能挨个去遍历每个路径。

我们来思考下具体步骤:

  1. 从二叉树的根节点开始深度优先搜索。
  2. 如果当前节点不是叶节点,我们要做两件事。
  • 用当前和减去当前节点的值来得到一个新的和=> `S = S - node.value`。
  • 对当前节点两个子节点都分别做上面这一步。
  1. 每一步我们都要看当前节点是不是叶节点,它的值是不是等于当前的和,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值