iT邦幫忙

2025 iThome 鐵人賽

DAY 0
0
自我挑戰組

Leetcode30天挑戰系列 第 14

Day14-Path Sum II

  • 分享至 

  • xImage
  •  

今天的題目為113.Path SumII,題目再叫我們找出所有從根節點到葉子節點的路徑,這些路徑的節點值加總要剛好等於targetSum。

以下是程式碼與解說:

class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        List<List<Integer>> result = new ArrayList<>(); 
        // 儲存所有符合條件的路徑
        List<Integer> path = new ArrayList<>();         
        // 暫存目前走過的路徑
        dfs(root, targetSum, path, result);             
        // 開始 DFS 遞迴
        return result;
    }

    private void dfs(TreeNode node, int targetSum, List<Integer> path,
                    List<List<Integer>> result) {
        if (node == null) return; // 若節點為 null,直接返回

        path.add(node.val);       // 將目前節點加入路徑
        targetSum -= node.val;    // 更新剩餘目標值

        // 若是葉子節點,且剩餘目標值為 0,代表找到一條符合的路徑
        if (node.left == null && node.right == null && targetSum == 0) {
            result.add(new ArrayList<>(path)); // 加入結果(需複製 path)
        }

        // 遞迴探索左右子樹
        dfs(node.left, targetSum, path, result);
        dfs(node.right, targetSum, path, result);

        path.remove(path.size() - 1); // 回溯:移除最後一個節點,準備探索其他路徑
    }
}

今天的跟昨天的一樣,但多了要把每一條路徑都找出來,不只是一條而已。


上一篇
Day13-Path Sum
下一篇
Day15-Flatten Binary Tree to Linked List
系列文
Leetcode30天挑戰15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言