题目描述
blablabla
样例
/**
* 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:
int sum ;
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> findPath(TreeNode* root, int sum) {
sum = sum;
dfs(root, sum);
return res;
}
void dfs(TreeNode *root, int sum) {
if(!root) return;
path.push_back(root->val);
sum = sum - root->val;
if(!root->left && !root->right && !sum) res.push_back(path);
if(root->left) dfs(root->left, sum);
if(root->right) dfs(root->right, sum);
path.pop_back();
}
};
简洁版
麻烦各位帮忙看下 ,这个代码为什么会通不过呢,打印出来是对的但是,返回不对。
# Definition for a binary tree node.
# class TreeNode(object):
# def init(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
sum += root->val;这一步回溯不需要吗?
我的代码也ac了,觉得应该要的啊。
感觉是因为dfs函数每次调用时都传递了sum参数,导致sum被用作一个局部变量,在回溯时不会改变之前的值。因此你加或不加sum += root->val;都不影响结果。
但是如果把sum从函数的接口中删除,sum作为一个全局变量,就必须恢复现场从而进行回溯。
代码
终于搞明白了,path 是全局变量,每一层都能看到,都能修改它,所以要回溯(恢复原状),而 sum 是局部变量,修改它只在当前这一层起作用,所以不用回溯(恢复原状)
请问最后的
path.pop_back();
处理是什么意思呢回溯
全局的sum并没有起任何的作用,去除全局sum,一样可以ac。
请仔细读读题
确实可以ac啊= =
确实可以ac啊