原文
https://www.b2bchain.cn/5925.html
//給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
//
// 說明: 葉子節點是指沒有子節點的節點。
//
// 示例:
//給定如下二叉樹,以及目標和 sum = 22,
//
// 5
// / \
// 4 8
// / / \
// 11 13 4
// / \ / \
// 7 2 5 1
//
//
// 返回:
//
// [
// [5,4,11,2],
// [5,8,4,5]
//]
//
// Related Topics 樹 深度優先搜索
//leetcode submit region begin(Prohibit modification and deletion)
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<List<Integer>> ans=new ArrayList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
Deque<Integer> level=new ArrayDeque<>();
if(root==null) return ans;
helper(root,sum,level);
return ans;
}
private void helper(TreeNode node,int sum,Deque<Integer> path){
if(node==null) return;
//先將當前節點加入之後,纔可以繼續操作
path.addLast(node.val);
sum-=node.val;
if(node.left==null && node.right==null && sum==0) {
ans.add(new ArrayList<>(path));
// 注意:這裏 return 之前必須重置
path.removeLast();
return;
}
helper(node.left,sum,path);
helper(node.right,sum,path);
path.removeLast();
}
}
//leetcode submit region end(Prohibit modification and deletion)