博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode----113. Path Sum II
阅读量:4112 次
发布时间:2019-05-25

本文共 2129 字,大约阅读时间需要 7 分钟。

链接:

大意:

给定一棵二叉树根节点root,以及一个整数sum。要求找出所有从根节点到叶子节点路径上数字之和为sum的路径,从上至下输出路径上的值。例子:

思路:

回溯法。

假设遍历到的当前节点记为node,使用subSum记录root到node的和(不包括node的值)。则可有如下几种情况进行分析:

  • node == null : 则直接返回
  • node != null && node.left == null && node.right == null:即该节点为 叶子节点,则判断 subSum + node.val == sum是否成立。若成立,则把node.val加入到 l,再将l加入到 res ,之后删除l的最后一个元素(回溯),之后函数立即返回
  • 若上述两种情况均不符合,即该节点还并不是叶子节点,则将该节点的值加入到l,subSum += node.val。继续对该节点的左右子树进行同样的操作。最后记得回溯

代码:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public List
> pathSum(TreeNode root, int sum) { List
> res = new ArrayList<>(); pathSum(root, 0, sum, res, new LinkedList<>()); return res; } public void pathSum(TreeNode root, int subSum, int sum, List
> res, LinkedList
l) { if (root == null) return ; // 当前节点是一个叶子节点 if (root.left == null && root.right == null) { if (subSum + root.val == sum) { l.addLast(root.val); res.add(new ArrayList<>(l)); l.removeLast(); } return ; } l.addLast(root.val); pathSum(root.left, subSum + root.val, sum, res, l); pathSum(root.right, subSum + root.val, sum, res, l); l.removeLast(); // 回溯 }}

结果:

结论:

 回溯法。应该是可以不需要subSum这个变量的,只需要使用sum依次减去当前节点值即可。

改进:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public List
> pathSum(TreeNode root, int sum) { List
> res = new ArrayList<>(); pathSum(root, sum, res, new LinkedList<>()); return res; } public void pathSum(TreeNode root, int sum, List
> res, LinkedList
l) { if (root == null) return ; // 当前节点是一个叶子节点 if (root.left == null && root.right == null) { if (sum == root.val) { l.addLast(root.val); res.add(new ArrayList<>(l)); l.removeLast(); } return ; } l.addLast(root.val); pathSum(root.left, sum - root.val, res, l); pathSum(root.right, sum - root.val, res, l); l.removeLast(); // 回溯 }}

 

转载地址:http://wxesi.baihongyu.com/

你可能感兴趣的文章
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
Vue项目中使用img图片和background背景图的使用方法
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>