题解 | #二叉树根节点到叶子节点和为指定值的路径#
二叉树根节点到叶子节点和为指定值的路径
http://www.nowcoder.com/practice/840dd2dc4fbd4b2199cd48f2dadf930a
C++ -DFS-
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param sumtmp int整型
* @return int整型vector<vector<>>
*/
vector<vector<int> > pathSum(TreeNode* root, int sum) {
// write code here
// 保存返回值
vector<vector<int>> res;
// 临时数组
vector<int> rettmp;
// 递归
dfs(res, rettmp, root, sum, 0);
return res;
}
//对所有路径进行查找,直到结束
void dfs(vector<vector<int>>&res, vector<int>&rettmp, TreeNode* ROOT, int sum, int tmp) {
//如果节点为空,返回
if (ROOT == nullptr) return ;
//保存值
int sumtmp = tmp + ROOT->val;
rettmp.push_back(ROOT->val);
//如果是叶子节点,判断是否满足要求
if (ROOT->left == nullptr && ROOT->right == nullptr ) {
if (sumtmp == sum) {
res.push_back(rettmp);//找到一个满足要求的路径
}
return ;//返回上一层
}
//如果是左子树
if (ROOT->left) {
dfs(res, rettmp, ROOT->left, sum, sumtmp);
//如果左边遍历完了,那么需要回溯一个
rettmp.pop_back();
}
//如果是右子树
if (ROOT->right) {
dfs(res, rettmp, ROOT->right, sum, sumtmp);
//如果右边遍历完了,那么需要回溯一个
rettmp.pop_back();
}
}
};