题目描述
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路分析:
递归方法是返回当前路径下匹配目标值的路径。
递归方法是返回当前路径下匹配目标值的路径。
目标值 = 目标值 - 当前节点值
共有几种情况:
1、当目标值为0 并且 节点下无其他节点
节点下无其他节点说明是叶子节点,并且路径值的和满足了目标值,把路径添加到结果中2、其余情况,继续递归
3、遍历完一条路径要回退到父节点
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>>listAll=new ArrayList<ArrayList<Integer>>(); ArrayList<Integer>list=new ArrayList<Integer>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { if(root==null) return listAll; list.add(root.val); target-=root.val; if(target==0&&root.left==null&&root.right==null){ listAll.add(new ArrayList<Integer>(list));//list是引用变量,如果不new一个的话,后面的操作会更改已经add进Arraylist的list } FindPath(root.left,target); FindPath(root.right,target); list.remove(list.size()-1);//移除listde最后一个元素 遍历完一条路径要回退到父节点 return listAll; } }