回溯法DFS
二叉树根节点到叶子节点和为指定值的路径
http://www.nowcoder.com/questionTerminal/840dd2dc4fbd4b2199cd48f2dadf930a
import java.util.ArrayList;
public class 根节点到叶子节点的路径和 {
/** * 使用回溯法,从根节点开始。每遍历一个节点,就将该节点的值放入路径中, * 判断是否为叶子节点,当前nowsum是否与sum相等, * 相等就将list加入到结果中,否则回退,回退要将list的最后一个元素删除。 */ ArrayList<ArrayList<Integer>> res=new ArrayList<>(); public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) { // write code here ArrayList<Integer> path=new ArrayList<>(); if (root==null)return res; dfs(root,0,sum,path); return res; } public void dfs(TreeNode root, int nowsum, int sum, ArrayList<Integer> list){ list.add(root.val); //判断是否为叶子节点,当前nowsum是否与sum相等, if (root.right==null&&root.left==null&&sum==(nowsum+root.val)){ //相等就将list加入到结果中, res.add(new ArrayList<>(list));return; } if (root.left!=null) { dfs(root.left,nowsum+root.val,sum,list); list.remove(list.size()-1); } if (root.right!=null){ dfs(root.right,nowsum+root.val,sum,list); list.remove(list.size()-1); } }
}