网站首页 > 精选教程 正文
题目描述:
给定一棵二叉树和一个整数sum,找出所有从根节点到叶节点的路径,这些路径上所有节点值的和等于sum。
例如,给定如下二叉树和sum=22,应返回:
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
[
[5,4,11,2],
[5,8,4,5]
]
解题思路:
这道题可以使用深度优先搜索(DFS)来解决。具体来说,从根节点开始,依次遍历每一个节点,并记录从根节点到该节点的路径,如果该节点是叶节点且路径和等于sum,则将该路径添加到结果列表中。否则,递归遍历该节点的左右子树,将当前节点从路径中移除,然后回溯到上一级节点继续遍历。
Java代码实现如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
List<Integer> path = new ArrayList<>();
dfs(root, sum, path, result);
return result;
}
private void dfs(TreeNode node, int sum, List<Integer> path, List<List<Integer>> result) {
// 将当前节点添加到路径中
path.add(node.val);
// 如果是叶节点且路径和等于sum,则将该路径添加到结果列表中
if (node.left == null && node.right == null && sum == node.val) {
result.add(new ArrayList<>(path));
} else {
// 否则,继续遍历左右子树
if (node.left != null) {
dfs(node.left, sum - node.val, path, result);
}
if (node.right != null) {
dfs(node.right, sum - node.val, path, result);
}
}
// 回溯到上一级节点,将当前节点从路径中移除
path.remove(path.size() - 1);
}
}
其中,TreeNode 是二叉树节点的定义:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
这道题的时间复杂度为 O(nlogn),其中 n 是二叉树的节点数。因为我们需要遍历二叉树的所有节点,每次遍历的时间复杂度是 O(logn),最坏情况下需要遍历所有的叶节点,因此总时间复杂度为 O(nlogn)。
猜你喜欢
- 2024-11-08 「JAVA」属性、路径分隔符有何不同?file对象创建,文件过滤器
- 2024-11-08 路径之谜问题 Java java 路径规划
- 2024-11-08 悟空云课堂 | 第三期:路径遍历漏洞的防范与检测
- 2024-11-08 运行在不同系统上的Java程序,如何处理路径分隔符的兼容问题
- 2024-11-08 身为架构师,这篇IO流File的讲解及使用你一定得看,写的非常详细
- 2024-11-08 Java数据库数据存取演化路径 java数据库语句
- 2024-11-08 JAVA学习:跨平台时文件路径处理,读写配置文件
- 2024-11-08 Javaweb 自定义 Servlet 实现按照访问路径转发
- 2024-11-08 揭秘 Java 跨系统文件路径组装的秘方!
- 2024-11-08 Java练习:机器人于网格左上角到达网格右下角,有多少不同路径
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)