题目

给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。

一个有效的路径,指的是从根节点到叶节点的路径。

解题

下面有个小bug

最后比较的时候是叶子节点为空,左右都有叶子结点,所有会出现重复的情况,聪明的你可能会想到保留不重复的结果

但是但一个树的结点都相同时候就不可以了

两层,三个结点,每个节点都是1,路径和是2

这样就有两个个答案[1,1]、[1,1]

所以再是叶子结点时候就要进行判断,这里的叶子结点要是真叶子节点,左右节点为空而自己不空

public class Solution {
/**
* @param root the root of binary tree
* @param target an integer
* @return all valid paths
*/
public List<ArrayList<Integer>> binaryTreePathSum(TreeNode root, int target) {
// Write your code here
ArrayList<Integer> list = new ArrayList<Integer>();
List<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
PathSum(root,target,result,list);
return result;
}
public void PathSum(TreeNode root,int target,List<ArrayList<Integer>> result,ArrayList<Integer> list){
if(target ==0 && root==null){
ArrayList<Integer> l = new ArrayList<Integer>(list);
if(!result.contains(l))
result.add(l);
return;
}
if( root==null)
return;
int val = root.val;
list.add(val); ArrayList<Integer> list2 = new ArrayList<Integer>(list);
    
PathSum(root.left,target-val,result,list);
     list.remove(list.size()-1);
PathSum(root.right,target-val,result,list2);
list2.remove(list2.size()-1);
}
}

AC代码

public class Solution {
/**
* @param root the root of binary tree
* @param target an integer
* @return all valid paths
*/
public List<ArrayList<Integer>> binaryTreePathSum(TreeNode root, int target) {
// Write your code here
ArrayList<Integer> list = new ArrayList<Integer>();
List<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
PathSum(root,target,result,list);
return result;
}
public void PathSum(TreeNode root,int target,List<ArrayList<Integer>> result,ArrayList<Integer> list){
if( root==null)
return; if( (target ==root.val) && root.left==null && root.right==null){
list.add(root.val);
ArrayList<Integer> l = new ArrayList<Integer>(list);
// if(!result.contains(l))
result.add(l);
return;
} int val = root.val;
list.add(val); ArrayList<Integer> list2 = new ArrayList<Integer>(list);
PathSum(root.left,target-val,result,list);
list.remove(list.size()-1);
PathSum(root.right,target-val,result,list2);
list2.remove(list2.size()-1);
}
}

最新文章

  1. layoutSubviews
  2. 如何自己编写Makefile
  3. 【转载】GUID vs INT Debate
  4. IIS 解决问题:HTTP 错误 401.1 - 未授权:登录失败
  5. 一个简单的SqlServer游标使用
  6. 如何设置DIV水平、垂直居中
  7. efficient c++,单线程内存池
  8. cas系列(三)--HTTP和HTTPS、SSL
  9. 字符串格式化 String.format() 案例
  10. Universal-Image-Loader 基本使用
  11. 基于visual Studio2013解决C语言竞赛题之0204实数求值
  12. 思迅/泰格/科脉/收银软件/商超软件数据库修复解决断电造成损坏的mdb\dat文件SQL数据库 置疑 修复 恢复
  13. Oracle数据库语言修改成UTF-8
  14. 三种方法实现CSS三栏布局
  15. JavaScript高级程序设计(读书笔记)(一)
  16. day1.接口测试(概念、Postman、SoapUI、jmeter)
  17. python基本数据类型之集合
  18. 一份不太简短的LaTeX模板
  19. SharePoint Online 创建资产库
  20. 使用Larave5.6l提交POST请求出现The page has expired due to inactivity错误

热门文章

  1. [转]理解与使用Javascript中的回调函数
  2. ubuntu 屏幕截图
  3. 轻松解决在一个虚拟主机上运行多个 ASP.NET 网站应用
  4. 11.5Daily Scrum
  5. 问题:ldconfig
  6. 如何分离数据库 (SQL Server Management Studio)
  7. linux打包压缩命令汇总
  8. android开发,关于android app实现静默安装自己(系统签名)
  9. c++ dirname() basename()
  10. Game shader or System shader is busy ::VS CSG