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 路径总和
打印所有根到叶路径
打印具有相对位置的所有根到叶路径