1.题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
2.思路:
DFS,当检测到叶子结点时,判断是否满足条件,若满足则存入res中,若不满足,则继续回溯遍历。要注意初始判断条件以及回溯时状态的还原。
3.代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int>> res;
if(root == NULL) return res;
vector<int> ans;
dfs(root, res, ans, 0, expectNumber);
return res;
}
void dfs(TreeNode* node, vector<vector<int>>& res, vector<int>& ans, int tmpValue, int expectNumber) {
ans.push_back(node->val);
tmpValue += node->val;
if(node->left == NULL && node->right == NULL && tmpValue == expectNumber) {
res.push_back(ans);
}
if(node->left != NULL) {
dfs(node->left, res, ans, tmpValue, expectNumber);
}
if(node->right != NULL) {
dfs(node->right, res, ans, tmpValue, expectNumber);
}
ans.pop_back();
tmpValue -= node->val;
}
};