LeetCode113.二叉樹路徑和
阿新 • • 發佈:2021-02-12
給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22
返回:
遞歸回溯(java)
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> res = new ArrayList< >();
traversal(root, targetSum, new ArrayList<Integer>(), res);
return res;
}
public void traversal(TreeNode node, int sum, List<Integer> list, List<List<Integer>> res) {
if (node == null) {
return;
}
list.add(node. val);
// 如果是葉子結點
if (node.left == null && node.right == null) {
// 如果sum等於節點值,說明這條路徑正好滿足題意
if (sum == node.val) {
// 新增到結果集合中,注意這裡一定要新建立一個list
res.add(new ArrayList<>(list));
}
// 回溯
list. remove(list.size()-1);
return;
}
// 如果節點不是葉子結點,遞迴左右葉子結點
traversal(node.left, sum-node.val, list, res);
traversal(node.right, sum-node.val, list, res);
// 回溯
list.remove(list.size()-1);
}
}