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

【算法详解】二叉树路径总和问题——DFS+回溯完整题解(Java实现)

在这里插入图片描述

求解思路

从根节点出发,沿着路径向下遍历,记录当前路径经过的所有节点。当到达叶子节点时,判断路径和是否等于目标值。然后回溯到父节点,继续探索其他路径,直到遍历完所有可能的路径。

递归流程分析

1. 叶子节点的处理
if (cur.left == null && cur.right == null) {// 到达叶子节点if (cur.val + sum == aim) {path.add(cur.val);           // 加入当前节点copy(path, ans);             // 拷贝路径到结果集path.remove(path.size() - 1); // 回溯,移除当前节点}
}
2. 非叶子节点的处理
else {path.add(cur.val);              // 做选择: 加入当前节点if (cur.left != null) {f(cur.left, aim, sum + cur.val, path, ans);  // 递归左子树}if (cur.right != null) {f(cur.right, aim, sum + cur.val, path, ans); // 递归右子树}path.remove(path.size() - 1);   // 撤销选择: 回溯
}

完整代码实现

public static List<List<Integer>> pathSum(TreeNode root, int aim) {List<List<Integer>> ans = new ArrayList<>();if (root != null) {List<Integer> path = new ArrayList<>();f(root, aim, 0, path, ans);}return ans;
}public static void f(TreeNode cur, int aim, int sum, List<Integer> path, List<List<Integer>> ans) {if (cur.left == null && cur.right == null) {// 叶节点if (cur.val + sum == aim) {path.add(cur.val);copy(path, ans);path.remove(path.size() - 1);}} else {// 非叶节点path.add(cur.val);if (cur.left != null) {f(cur.left, aim, sum + cur.val, path, ans);}if (cur.right != null) {f(cur.right, aim, sum + cur.val, path, ans);}path.remove(path.size() - 1);}
}public static void copy(List<Integer> path, List<List<Integer>> ans) {List<Integer> copy = new ArrayList<>();for (Integer num : path) {copy.add(num);}ans.add(copy);
}

如果觉得有帮助,欢迎点赞、关注、转发~

http://www.dtcms.com/a/578525.html

相关文章:

  • 建设外围彩票网站抛丸机网站怎么做
  • 网站推广服务chuseo网页设计版权信息代码
  • 南皮网站建设巢湖seo推广选哪家
  • ios7风格网站北京市网站建设公司排名
  • 鸿蒙应用状态管理新方案:AppStorageV2与PersistenceV2深度详解
  • 状态管理(State Management)
  • 网站源码设计工程信息
  • 怎么搭建一个视频网站室内设计在线网站
  • 广州注册公司最新流程石家庄视频优化公司
  • DIC技术在汽车风洞试验中的革新应用:流场与形变的全场测量
  • Linux 的 RDP 代理
  • 怎么用手机做网站服务器win2008 iis 新建网站
  • Windows10 离线安装.NET3.5
  • Keepalived核心机制与生产实战全解析
  • 夺宝网站制作网站建设公开
  • php网站建设课程作业关键词优化公司网站
  • C++中的多态:动态多态与静态多态详解
  • C++高级数据结构:并查表
  • 牛牛网站开发如何弄一个自己的网站
  • 云计算产品-介绍--计算篇
  • 岳池网站建设珠海seo海网站建设
  • 技术解析:鸿蒙 PC 为什么采用 aarch64 架构?
  • B样条曲线降阶方法介绍
  • SciPy 图结构
  • 深圳本地网站建设做酒业网站的要求
  • Linux下查看指定内容的完整日志
  • 做网站 用什么兼容学院网站设计模板
  • 财务分析怎么做?4大关键模块手把手教你做!
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析6
  • 电商商城网站建设方案wordpress博客xiu