首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 113:路徑總和 II——二叉樹 DFS 回溯

     編輯:關於C++

題目描述

給定二叉樹根節點和目標和 sum,找出所有從根到葉子節點路徑節點值之和等于 sum 的路徑。

示例

      5
     / \
    4   8
   /   / \
  11  13  4
 /  \    / \
7    2  5   1
sum = 22
輸出:[[5,4,11,2], [5,8,4,5]]

遞歸回溯算法

  1. 維護當前路徑 path 和結果集 paths
  2. DFS 遍歷:進入節點將值加入 path
  3. 若為葉子且剩餘和等于節點值 → 加入結果
  4. 遞歸左右子樹,剩餘和減去當前節點值
  5. 回溯:退出節點時從 path 彈出值

C++ 實現

class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        vector<vector<int>> paths;
        vector<int> path;
        dfs(root, sum, paths, path);
        return paths;
    }
private:
    void dfs(TreeNode* node, int sum,
             vector<vector<int>>& paths,
             vector<int>& path) {
        if (!node) return;
        path.push_back(node->val);
        if (!node->left && !node->right && node->val == sum)
            paths.push_back(path);
        dfs(node->left,  sum - node->val, paths, path);
        dfs(node->right, sum - node->val, paths, path);
        path.pop_back();
    }
};

複雜度

  • 時間:O(n) —— 每個節點訪問一次
  • 空間:O(h) —— 遞歸棧深度 + 路徑存儲,h 為樹高

效能圖示

運行時間分佈

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved