/*
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
*/
/*
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) {
std::vector<std::vector<int> > vecRet ;
if(root == NULL) return vecRet ;
std::vector<int> vecCurPath ;
int nCurValue = 0 ;
DoIt(vecRet, root, vecCurPath, nCurValue, expectNumber) ;
return vecRet ;
}
void DoIt(std::vector<std::vector<int> >& vecRet, TreeNode* root, std::vector<int>& vecCurPath, int& nCurValue, int expectNumber) {
vecCurPath.push_back(root->val) ;
nCurValue += root->val ;
if(nCurValue == expectNumber && root->left == NULL && root->right == NULL) {
vecRet.push_back(vecCurPath) ;
nCurValue -= root->val ;
vecCurPath.pop_back() ;
}else if(nCurValue > expectNumber) {
vecCurPath.pop_back() ;
nCurValue -= root->val ;
}else {
if(root->left) DoIt(vecRet, root->left, vecCurPath, nCurValue, expectNumber) ;
if(root->right) DoIt(vecRet, root->right, vecCurPath, nCurValue, expectNumber) ;
nCurValue -= root->val ;
vecCurPath.pop_back() ;
}
}
};
二叉树中和为某一值的路径
最新推荐文章于 2022-03-14 15:20:10 发布