剑指offer第二十四题。
题目描述
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
解题思路
递归到叶子节点,每次递归都减掉当前节点的值,到最后剩下的值与叶子结点是否相等。
我的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| import java.util.ArrayList;
public class Solution { public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { ArrayList<ArrayList<Integer>> paths =new ArrayList<ArrayList<Integer>>(); if(root == null) return paths; find(paths,new ArrayList<>(),root,target); return paths; } private void find(ArrayList<ArrayList<Integer>> paths, ArrayList<Integer> path, TreeNode root, int target){ path.add(root.val); if(root.left==null && root.right==null){ if(target == root.val){ paths.add(path); } return; } ArrayList<Integer> path2 = new ArrayList<>(); path2.addAll(path); if(root.left != null) find(paths,path,root.left,target-root.val); if(root.right != null) find(paths,path2,root.right,target-root.val); } }
|