二叉树路径总和:深度优先搜索解法
需积分: 5 167 浏览量
更新于2024-08-05
收藏 427KB PDF 举报
"18_路径总和||.pdf"
这篇资料主要讨论了二叉树中的一个算法问题——路径总和。路径总和是指在给定的二叉树中,找出所有从根节点到子节点的路径,使得路径上所有节点值之和等于给定的目标值。这个问题通常使用深度优先搜索(DFS)来解决。
首先,我们来看一下这个问题的示例。例如,给定的二叉树结构如下:
```
5
/ \
4 8
/ \ / \
11 4 7 2
\
5
/
1
```
目标和是22,我们需要找到所有从根节点5到子节点的路径,使得路径上的节点值之和为22。满足条件的路径有两条:[5, 4, 11, 2] 和 [5, 8, 4, 5]。
解决这个问题的方法是深度优先搜索。深度优先搜索是一种递归策略,用于遍历或搜索树或图。在这个问题中,我们从根节点开始,每次访问一个节点时,我们将节点值加到当前路径的总和中,并更新目标和。如果遍历到的是一个叶子节点(即没有子节点的节点),并且当前路径的总和等于目标和,那么我们就找到了一个符合条件的路径,并将其添加到结果列表中。
以下是Java实现的DFS算法:
```java
class Solution {
List<List<Integer>> ret = new LinkedList<List<Integer>>();
Deque<Integer> path = new LinkedList<Integer>();
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
dfs(root, targetSum);
return ret;
}
public void dfs(TreeNode root, int targetSum) {
if (root == null) {
return;
}
path.offerLast(root.val);
targetSum -= root.val;
if (root.left == null && root.right == null && targetSum == 0) {
ret.add(new LinkedList<Integer>(path));
}
dfs(root.left, targetSum);
dfs(root.right, targetSum);
path.pollLast();
}
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
}
```
在这个Java代码中,`Solution`类包含了两个方法:`pathSum`是主方法,它调用`dfs`进行深度优先搜索。`dfs`方法接收当前节点和目标和作为参数。每当访问一个节点,就将节点值放入`path`队列中,然后检查是否到达叶子节点且路径和等于目标和。如果是,则将路径添加到结果列表`ret`中。最后,当回溯时,从`path`队列中移除当前节点,继续搜索其他路径。
路径总和问题是一个经典的二叉树遍历问题,通过深度优先搜索策略可以有效地找到所有符合条件的路径。在实际编程中,这种问题经常出现在数据结构和算法的面试和考试中,因此理解和掌握这个算法对提升编程技能非常有帮助。
2022-03-19 上传
2024-03-14 上传
2020-11-19 上传
2021-10-06 上传
2021-01-25 上传
2021-09-15 上传
2021-10-31 上传
2022-06-29 上传
2021-10-12 上传
JoyfulRust
- 粉丝: 37
- 资源: 28
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构