当前位置: 首页 > news >正文

二叉树中和为目标值的路径

LCR 153. 二叉树中和为目标值的路径

LCR 153. 二叉树中和为目标值的路径

参考题解

前言

该题考察二叉树中的回溯,使用先序遍历以及路径记录

先序遍历:根左右

路径记录:通过一个“中间人”(path)来记录当前的路径和,当符合目标条件就赋值给res

递归函数–recur()

1、边界条件

  • root为空的时候,直接返回

2、把root.val加入到path中,同时还要对tar减去root.val,即tar -= root.val

3、当root是叶子节点,而且目标值tar等于 0 的时候,即这一条path是符合题目要求的,将path加入到res当中

  • 注意:这里将path加入到res需要新建一个对象,再加入到res中,否则会有数据冲突,后续path发生改变的时候,res中的path也会有改变,因为该path变量始终都是同一个对象,在堆中的地址是一样的,因为才需要新建一个对象再加入到res

4、递归遍历左,右子树

5、由于已经遍历到了叶子节点,因此需要进行回溯,即path.pop()

public void recur(TreeNode root, int tar) {if(root == null) {return;}path.add(root.val); // 加入当前节点值到 pathtar -= root.val;if(tar == 0 && root.left == null && root.right == null) {res.add(new LinkedList<>(path));}recur(root.left, tar);recur(root.right, tar);path.removeLast();
}

pathTarget函数

执行递归函数recur()

返回res

注意:pathres需要定义为全局变量

public List<List<Integer>> pathTarget(TreeNode root, int target) {recur(root, target);return res;
}

完整代码展示

class Solution {private final List<List<Integer>> res = new LinkedList<>();private final List<Integer> path = new LinkedList<>();public List<List<Integer>> pathTarget(TreeNode root, int target) {recur(root, target);return res;}public void recur(TreeNode root, int tar) {if(root == null) {return;}path.add(root.val); // 加入当前节点值到 pathtar -= root.val;if(tar == 0 && root.left == null && root.right == null) {res.add(new LinkedList<>(path));}recur(root.left, tar);recur(root.right, tar);path.removeLast();}
}

ps:该题的一些思想和全排列有些相似

http://www.gsyq.cn/news/21206.html

相关文章:

  • 云原生技术概览
  • OCI
  • SpringBoot定时任务不定时执行了
  • 时间格式不能正常转换?
  • 群发红包系统
  • PaddleOCR源码安装+centos7.6+python3.10
  • 10.14日学习笔记
  • 全局解释器锁(GIL)
  • How to Speak English with Only 50 Sentences
  • ZR3365
  • 六维力传感器材质选择:影响性能与精度的关键因素 - 实践
  • vtk学习——Pipeline
  • 长沙四大名校x东方project
  • SpringBoot运维实用篇(YW-1.SpringBoot程序的打包与运行,YW-2.配置高级,YW-3.多环境开发,YW-4.日志) - a
  • 10.14 NOIP 模拟赛 T1. HappyLovelyEveryday!
  • 20251014 杂题
  • SQL在智能自动化业务场景中的应用 - Irving11
  • .net Core资料
  • 日志|二叉树|110平衡二叉树|111二叉树的最大深度|199二叉树的右视图
  • 吾の歌单
  • Qwen多模态系列模型笔记—Qwen2-VL
  • WPF 调用 ChangeWindowMessageFilterEx 修改指定窗口 (UIPI) 消息筛选器的用户界面特权隔离
  • 歌词本。 - Slayer
  • ai出题
  • 从 0 到 1 实现高性能日志库 MiniSpdlog — 这可能是最适合新手的日志系统实战项目 !
  • 思想惰性:警惕时代中的精神惯性
  • journalctl 查看服务日志
  • 对ssh修改源码过程
  • 低代码时代,企业机遇在哪里
  • 从后端转行为AI工程师,转行AI大模型开发,附全套学习资源!收藏这份指南! - 实践