【发布时间】:2017-03-15 08:02:12
【问题描述】:
在给定二叉树和sum的情况下,以下代码用于查找等于特定sum的所有从根到叶的路径。
class Solution {
public:
void buildResult(std::vector< std::vector< int > >& result, std::vector< int >& ans, TreeNode* root, int sum) {
if(!root)
return;
ans.push_back(root->val);
if(root->val==sum && !root->left && !root->right)
result.push_back(ans);
buildResult(result, ans, root->left, sum-(root->val));
buildResult(result, ans, root->right, sum-(root->val));
ans.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
std::vector< vector< int > > result;
std::vector< int > ans;
if(!root)
return result;
buildResult(result, ans, root, sum);
return result;
}
};
上面的代码工作并生成预期的输出。但是,我不明白 ans.pop_back(); 语句的用法 - 我知道它是用于回溯,但究竟是什么时候进行的回溯?甚至在检查它们是否位于有效路径上之前,这些值就被插入到向量 ans 中。此外,pop_back()s 的数量应该很多,这取决于插入了多少导致错误总和的数字。有人可以向我解释一下这个工作吗?
谢谢!
【问题讨论】:
-
您可以制作一个小测试用例,然后使用调试器或铅笔和纸自己看看它是如何工作的。
-
@JamesRoot,我试过了;但我无法理解。任何指针将不胜感激。
标签: c++ binary-tree