简单的递减,每层减去自己的值,到最后和叶子节点的值比较即可,若和叶子节点值相等,则该路径的和正好相等。
c++实现
class Solution {
public:
vector<vector<int>> res;
void Path(TreeNode* Node, vector<int> single, int expectNumber){
if(!Node){ //到底了,返回
return ;
}else{
single.push_back(Node->val); //将结点值放入单路径容器中
}
if(!Node->left && !Node->right && expectNumber == Node->val){
res.push_back(single); //若叶子节点的值和递减下来的值相同,则该路径符合条件,加入到res路径容器当中
}
//往下走,将本节点的值减去,每层都去掉本节点的值,到最后叶子节点应该正好和这个值相等
Path(Node->left, single, expectNumber-Node->val);
Path(Node->right, single, expectNumber-Node->val);
}
vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {
vector<int> single;
Path(root, single, expectNumber);
return res;
}
};