java 深度优先搜索dfs
二叉树根节点到叶子节点和为指定值的路径
http://www.nowcoder.com/questionTerminal/840dd2dc4fbd4b2199cd48f2dadf930a
import java.util.*; import java.util.ArrayList; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class Solution { /** * * @param root TreeNode类 * @param sum int整型 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) { // write code here ArrayList <ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> path=new ArrayList<Integer>(); if(root==null)return res; path.add(root.val); dfs(root,sum,path,res); return res; } public static void dfs(TreeNode root,int sum,ArrayList path,ArrayList <ArrayList<Integer>> res){ if (root.left==null&&root.right==null &&sum(path)==sum){ res.add(new ArrayList<>(path)); } if (root.left!=null){ path.add(root.left.val); dfs(root.left,sum,path,res); path.remove(path.size()-1);//此处注意,和Python不同,需要自行移除 } if (root.right!=null){ path.add(root.right.val); dfs(root.right,sum,path,res); path.remove(path.size()-1); } } public static int sum(ArrayList list){//自己写一个求和函数 int s=0; for(Object i:list){ s+=(int)i; } return s; } }