题目描述:
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路:
路径是从树的根结点开始往下一直到叶节点所经过结点形成一条路径,所以我们要确保最后一个路径结点为叶节点。
- 使用递归一直向下将叶节点的值相加。
- 递归结束条件:当前结点为空。
- 如果当前节点为空时,这条路径的值正好等于 target,则存至结果队列中。
- 如果不相等,则将路径栈中的栈顶元素,即当前叶子节点出栈。表示当前结点判断结束,不符合。回到父节点的其他没有判断过的结点。
public class Solution {
// 结果队列
private ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>> ();
// 路径
private Stack<Integer> path = new Stack<> ();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
if(root == null){
return result;
}
path.push (root.val);
target -= root.val;
if(target == 0 && root.left == null && root.right == null){
result.add (new ArrayList<Integer> (path));
}
FindPath (root.left,target);
FindPath (root.right,target);
path.pop ();
return result;
}
}