面试题 04.12. 求和路径
题目
这道题有意思的一点是:路径不一定得从根节点开始,也不一定得到叶子节点结束,这道题2叉树和为某一个值的路径比较像,本质上还是一道DFS类型的题目
那么因为可以从任意一个节点开始,所以我们需要遍历到每个节点作为开始,满足条件的时候结束
class Solution {
private:
int cnt = 0;
public:
int pathSum(TreeNode* root, int sum) {
if(!root)
return cnt;
pre_order(root, sum);
return cnt;
}
void dfs(TreeNode *root, int sum){
if(!root)
return;
if(root->val == sum)
cnt++;
dfs(root->left,sum - root->val);
dfs(root->right, sum -root->val);
}
void pre_order(TreeNode *root, int sum){
/*
路径有可能从任何节点开始,所以干脆前序遍历一遍
*/
if(!root)
return;
dfs(root, sum);//同时看从root这个节点开始的时候,有没有符合条件的路径
pre_order(root->left, sum);
pre_order(root->right, sum);
}
};