import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayList<ArrayList<Integer>> res=new ArrayList<>(); ArrayList<Integer> list=new ArrayList<>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { if(root==null){ return res; } doMethod(root,target); return res; } public void doMethod(TreeNode root,int target){ list.add(root.val); //当前结点加入 list //处理跟节点的情况 也是左右子树 递归结束的条件 if(root.val==target && root.left==null && root.right==null){ res.add(new ArrayList(list)); //return res; 可能有多条路径不能直接return } if(root.left!=null){ doMethod(root.left,target-root.val); } if(root.right!=null){ doMethod(root.right,target-root.val); } //遍历失败(该结点左右子树都为空并val!=target) 删除list中的当前结点 list.remove(list.size()-1); return; } }
题目描述:
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)。
思路:
深度优先遍历。