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

时尚网站模板wordpress课程

时尚网站模板,wordpress课程,潍坊知名网站建设怎么收费,专门下软件的app113. 路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 示例 1:输入: root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出: [[5,4…

113. 路径总和 II

给你二叉树的根节点 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]]

深度优先搜索(DFS)递归回溯思路

  • 从根节点出发,递归遍历每一条路径。
  • 用一个列表记录当前路径上的节点值。
  • 每到一个节点,将其值加入路径列表,并累加到当前路径和。
  • 如果到达叶子节点且路径和等于目标和,则将当前路径的副本加入结果集。
  • 递归返回时,需要将当前节点值从路径列表中移除(回溯)。
  • 最终返回所有满足条件的路径。
public class Solution {public List<List<Integer>> pathSum(TreeNode root, int targetSum) {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();dfs(root, targetSum, path, res);return res;}private void dfs(TreeNode node, int targetSum, List<Integer> path, List<List<Integer>> res) {if (node == null) return;path.add(node.val);targetSum -= node.val;if (node.left == null && node.right == null && targetSum == 0) {res.add(new ArrayList<>(path));}dfs(node.left, targetSum, path, res);dfs(node.right, targetSum, path, res);path.remove(path.size() - 1); // 回溯}
}

深度优先搜索(DFS)非递归(栈模拟)
深度优先搜索(DFS)非递归(栈模拟)方法利用栈来模拟递归过程。每次将当前节点、当前路径和、当前路径列表一起压入栈中。遍历时弹出栈顶元素,判断是否为叶子节点且路径和等于目标和,如果是则将路径加入结果集。否则,将左右子节点连同更新后的路径和路径列表压入栈中。这样可以避免递归带来的栈溢出风险。

class Solution {public List<List<Integer>> pathSum(TreeNode root, int targetSum) {List<List<Integer>> result = new ArrayList<>();if (root == null) return result;// 栈中存储:当前节点、当前路径和、当前路径Deque<Object[]> stack = new ArrayDeque<>();stack.push(new Object[]{root, root.val, new ArrayList<>(Arrays.asList(root.val))});while (!stack.isEmpty()) {Object[] tuple = stack.pop();TreeNode node = (TreeNode) tuple[0];int sum = (int) tuple[1];List<Integer> path = (List<Integer>) tuple[2];// 判断是否为叶子节点且路径和等于目标和if (node.left == null && node.right == null && sum == targetSum) {result.add(new ArrayList<>(path));}// 右子节点先入栈if (node.right != null) {List<Integer> newPath = new ArrayList<>(path);newPath.add(node.right.val);stack.push(new Object[]{node.right, sum + node.right.val, newPath});}// 左子节点后入栈if (node.left != null) {List<Integer> newPath = new ArrayList<>(path);newPath.add(node.left.val);stack.push(new Object[]{node.left, sum + node.left.val, newPath});}}return result;}
}

广度优先搜索(BFS)
广度优先搜索(BFS)用于本题时,通常用队列来存储节点、当前路径和路径和。每次从队列取出一个节点,判断是否为叶子节点且路径和等于目标和,如果是则将路径加入结果集。否则,将其左右子节点和对应的路径、路径和加入队列。

public class Solution {public List<List<Integer>> pathSum(TreeNode root, int targetSum) {List<List<Integer>> result = new ArrayList<>();if (root == null) return result;// 队列存储:当前节点、到该节点的路径、路径和Queue<TreeNode> nodeQueue = new LinkedList<>();Queue<List<Integer>> pathQueue = new LinkedList<>();Queue<Integer> sumQueue = new LinkedList<>();nodeQueue.offer(root);pathQueue.offer(new ArrayList<>(Arrays.asList(root.val)));sumQueue.offer(root.val);while (!nodeQueue.isEmpty()) {TreeNode node = nodeQueue.poll();List<Integer> path = pathQueue.poll();int sum = sumQueue.poll();// 如果是叶子节点且路径和等于目标和if (node.left == null && node.right == null && sum == targetSum) {result.add(new ArrayList<>(path));}// 左子节点if (node.left != null) {nodeQueue.offer(node.left);List<Integer> newPath = new ArrayList<>(path);newPath.add(node.left.val);pathQueue.offer(newPath);sumQueue.offer(sum + node.left.val);}// 右子节点if (node.right != null) {nodeQueue.offer(node.right);List<Integer> newPath = new ArrayList<>(path);newPath.add(node.right.val);pathQueue.offer(newPath);sumQueue.offer(sum + node.right.val);}}return result;}
}
http://www.dtcms.com/a/547970.html

相关文章:

  • 西安网站搜索引擎优化wordpress主题接入社交功能
  • 网站ppt怎么做seo工作内容
  • 建设金融网站在线制作图谱
  • 本地网站建设公司wordpress在线浏览pdf
  • 做中国o2o网站领导阿里巴巴官网电脑版
  • 建营销网站wordpress迁服务器
  • 上海做网站的公司c 做网站加载多个图片
  • 深圳福田高端网站建设浙江seo技术培训
  • 网站首页seo关键词布局百度建站
  • 网站设计常用软件网页设计制作多少钱
  • 兰州最好的网站建设公司建设企业网站官网下载
  • 天河低价网站建设泰安网站营销推广
  • 找网站开发项目手机app软件安装下载
  • 网站导航这么做农村电商做什么项目好
  • 宿迁网站优化排名深圳做网站的公司
  • 刚开始做汽配网站要进货广州比较好的网站建设
  • 个体户做网站去哪里做宁波网站建设培训
  • 怎么做示爱的网站眼镜厂官网
  • 简单的seo网站优化排名湘潭做网站公司
  • 网站服务器维护内容asp.net网站开发简明教程
  • 齐河专业企业网站建设黑龙江暴雪预警
  • 趣php网站开发实战代码免费个人网站在线制作
  • 解析软件的网站微信管理员怎么设置
  • 站长网站推广郑州个人网站建设公司排行榜
  • wordpress建站资源wordpress增加内存分配给php
  • 微信 网站界面 模板做网站在哪接单
  • 哪个省份网站建设便宜网站维护预算
  • 网络营销环境分析报告seo的关键词无需
  • 浙江建设部网站医疗公司logo设计图片
  • 怎么建立一个网站推广网站seo关键词优化