作者:whisper
链接:https://www.proprogrammar.com/article/922
声明:请尊重原作者的劳动,如需转载请注明出处
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例:
给定如下二叉树,以及目标和
target = 22
,5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
返回:
[ [5,4,11,2], [5,8,4,5] ]提示:
节点总数 <= 10000
难度:中等;标签:树,深度优先搜索;编程语言:C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
vector<vector<int>>res;
public:
// c++改写
vector<vector<int>> pathSum(TreeNode* root, int sum) {
res.clear();
vector<int> l;
pathSum(root, &l, 0, sum);
return res;
}
void pathSum(TreeNode* node, vector<int>* l, int val, int sum){
if(node != NULL){
l->push_back(node->val);
if(val + node->val == sum){
if(node->left == NULL && node->right == NULL){
vector<int> temp(l->begin(), l->end());
res.push_back(temp);
}
}
pathSum(node->left, l, val + node->val, sum);
pathSum(node->right, l, val + node->val, sum);
l->erase(l->begin() + l->size() - 1, l->end());
}
}
};
深度优先搜索,注意到一定是到叶节点,而且如果没有到叶节点时出现和为sum,还是要向下深搜,因为下层的和可能为0,如sum=5,路径为2,3,1,-1,
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
vector<int>path;
vector<vector<int>>res;
public:
vector<vector<int>> pathSum(TreeNode* root, int target) {
// LinkedList<List<Interger>>=new LinkedList<>();
dfs(root,target);
return res;
}
void dfs(TreeNode* curr,int target)
{
if(curr)
{
// target-=target-curr->val;
target-=curr->val;
path.push_back(curr->val);
if(target==0&&curr->left==nullptr&&curr->right==nullptr)
{
res.push_back(path);
}
else
{
dfs(curr->left,target);
dfs(curr->right,target);
}
path.pop_back();
}
}
};
和我的解法差不多,不同的是我的解法dfs时没有else分支,这里有else分支,效率好一点,没有else也是可以的,代码看起来简洁一些,这算是一个小技巧,我的是结点值相加与sum比较,这里是sum减结点值与0比较,意思都差不多
亲爱的读者:有时间可以点赞评论一下
全部评论