c_cpp 给定二叉树和求和,找到所有根到叶路径,其中每个路径的总和等于给定的总和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定二叉树和求和,找到所有根到叶路径,其中每个路径的总和等于给定的总和相关的知识,希望对你有一定的参考价值。

vector<vector<int>> pathSum(TreeNode *root, int sum) {
    vector<vector<int> > res;
    vector<int> path;
    if(!root) return res;
    //DFS(root, res, path, 0, sum);
    DFS(root, res, path, sum);
    return res;
}

// solution 1: works
/*    
void DFS(TreeNode *root, vector<vector<int>> &res, vector<int> path, int cur_sum, int sum) {
    //if(!root) return; // no need to have this line
    if(!root->left && !root->right && cur_sum + root->val == sum) {
        path.push_back(root->val);
        res.push_back(path);
        return;
    }
    path.push_back(root->val);
    if(root->left) DFS(root->left, res, path, cur_sum + root->val, sum);
    if(root->right) DFS(root->right, res, path, cur_sum + root->val, sum);
    path.pop_back();
} */

void DFS(TreeNode *root, vector<vector<int>> &res, vector<int> path, int sum) { // note, cannot write &path
    // if(!root) return; // note, if have this line, no need to check at NOTE1 and NOTE2
    if(!root->left && !root->right && root->val == sum) {
        path.push_back(root->val);
        res.push_back(path);
        return;
    }
    path.push_back(root->val);
    if(root->left) DFS(root->left, res, path, sum - root->val);     // NOTE1
    if(root->right) DFS(root->right, res, path, sum - root->val);   // NOTE2
    path.pop_back();
}

以上是关于c_cpp 给定二叉树和求和,找到所有根到叶路径,其中每个路径的总和等于给定的总和的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 将根与叶数相加。给定仅包含0-9的数字的二叉树,每个根到叶路径可以表示数字。一个例子

给定一棵二叉树,找到所有从根到叶的路径

113 Path Sum II 路径总和 II

112 Path Sum 路径总和

打印所有根到叶路径

打印具有相对位置的所有根到叶路径