LeetCode算法心得——路径总和||(dfs+双端队列+链表)
最佳答案 问答题库448位专家为你答疑解惑
大家好,我是晴天学长,简单树的经典题目,是dfs的开端啊,需要的小伙伴可以关注支持一下哦!后续会继续更新的。
1) .路径总和||
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]
示例 2:
输入:root = [1,2,3], targetSum = 5
输出:[]
示例 3:
输入:root = [1,2], targetSum = 0
输出:[]
提示:
树中节点总数在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
2) .算法思路
路径总和:
1.用这个List<List> ret = new LinkedList<List>();
存答案
2. Deque path = new LinkedList();
双向队列 ,可以实现栈
3.dfs
4.空的话,返回空(单亲节点)
5.把数据放入栈
6.左右节点。
7.把元素弹出
3) .算法步骤
1.创建一个二维列表 list 用于存储所有路径和等于目标和的路径。
2.创建一个双端队列 queue 用于保存当前路径上的节点值。
3.定义 pathSum 方法,接受一个二叉树的根节点 root 和目标和 targetSum 作为参数,并返回结果列表 list。
4.在 dfs 方法中,首先判断当前节点 root 是否为空,如果为空则直接返回。
5.将当前节点的值加入到队列末尾,同时将目标和减去当前节点的值。
6.如果当前节点是叶子节点(即左右子节点均为空),并且目标和等于0,则将当前路径添加到结果列表 list 中。
7.递归调用 dfs 方法,分别遍历当前节点的左子节点和右子节点,并传递更新后的目标和。
8.回溯,将队列末尾的节点值移除,以便继续遍历其他路径。
4).代码示例
class Solution {List<List<Integer>> list = new LinkedList<>();Deque<Integer> queue = new LinkedList<>();public List<List<Integer>> pathSum(TreeNode root, int targetSum) {dfs(root, targetSum);return list;}private void dfs(TreeNode root, int targetSum) {if (root == null) return;queue.offerLast(root.val);targetSum -= root.val;if (root.left == null && root.right == null && targetSum == 0) {list.add(new ArrayList<>(queue));}dfs(root.left, targetSum);dfs(root.right, targetSum);queue.pollLast();}}
5).总结
- 递归的正确顺序。
- 全局变量需要回溯,局部变量不用。
- 双链表和双端队列的应用。
试题链接:
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)
- 代码随想录二刷 | 链表 | 删除链表的倒数第N个节点
- 节点导纳矩阵
- bhosts 显示节点 “unreach“ 状态
- 电子电器架构 —— 车载网关边缘节点总线转换
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 第四天||24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
- CS224W5.1——消息传递和节点分类
- Vue报错解决Error in v-on handler: “Error: 无效的节点选择器:#div1“
猜你感兴趣
版权申明
本文"LeetCode算法心得——路径总和||(dfs+双端队列+链表)":http://eshow365.cn/6-31892-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 强化学习(RL)的学习笔记
- 下一篇: css基础之实现轮播图