Leetcode 113. 路徑總和 II C++
阿新 • • 發佈:2018-12-20
題目描述
思路
這道題目是採用的方法是深度優先搜尋。只不過需要將結果找到的結果保留下來。具體做法: 設定一個臨時的陣列儲存已經歷遍到的元素。在遞迴呼叫的時候,每次先將當前根節點的元素存入陣列,然後將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);
}
};