题目链接:点击这里
思路:二叉树的先序遍历
- 从根节点深度遍历二叉树,先序遍历时,将该节点值存储至 栈 中 (vector实现),使用 累加节点值。
- 当遍历至叶结点时,检查 值是否为 ,若为 ,则将 进入 结果中。
- 在回溯时,将该节点值从 栈 中弹出, 减去节点值。
/**
* 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:
void preorder(TreeNode* r, int &path_value, int sum, vector<int> &path, vector<vector<int>> &result)
{
if(!r) return;
path_value += r->val;
path.push_back(r->val);
if(r->left==NULL&&r->right==NULL&&path_value==sum)
result.push_back(path);
preorder(r->left, path_value, sum, path, result);
preorder(r->right, path_value, sum, path, result);
path_value -= r->val;
path.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> result; //存储所有满足条件的路径
vector<int> path; //路径栈
int path_value = 0;
preorder(root, path_value, sum, path, result);
return result;
}
};