1. 程式人生 > >Leetcode 113. 路徑總和 II C++

Leetcode 113. 路徑總和 II C++

題目描述

在這裡插入圖片描述

思路

這道題目是採用的方法是深度優先搜尋。只不過需要將結果找到的結果保留下來。具體做法: 設定一個臨時的陣列儲存已經歷遍到的元素。在遞迴呼叫的時候,每次先將當前根節點的元素存入陣列,然後將sum的值減去當前的元素值。一直歷遍到葉節點,如果此時sum減去當前的元素值等於0,那麼說明這個路徑的和為sum。這是就找到了一條路徑,並將其存入結果中。

解答

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution { public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> res; if(!root) return res; vector<int> temp; dfs(root, res, temp, sum); return res; } //注意,下面的res應該設為引用,但是temp不可以設為引用 void
dfs(TreeNode* root,vector<vector<int>> &res, vector<int> temp, int sum) { temp.push_back(root->val); if(!root->left && !root->right && 0==sum-root->val) res.push_back(temp); //這裡自己一開始寫成了 0==sum ,導致輸出結果為空或者錯 if(root->left) dfs
(root->left, res, temp, sum - root->val); if(root->right) dfs(root->right, res, temp, sum - root->val); } };