NC 8 二叉树根节点到叶子节点和为指定值的路径
情景提要
牛客题解系列,按照题号顺序开始。
NC8
01
题目描述
返回
[[5,4,11,2],
[5,8,9]]
02
输入输出示例
输入:
{1,2} 1
输出:
[]
03
题目分析
思路
本题和NC5 几乎是一样的,依然是递归和迭代两种方法都可以做,只需要改变一下到了根节点时的判断条件就可以了。这里靓仔就偷个懒,只写一下递归的方法啦。
和NC5不一样的是,这里靓仔并没有修改树的结点值,而是使用了中间变量,用的回溯的思想。改变结点的值还是使用中间变量,只是程序实现的两种方式而已。
03
代码实现
方法
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型vector<vector<>>
*/
// 回溯
vector<vector<int> > res;
vector<int> tmp;
vector<vector<int> > pathSum(TreeNode* root, int sum) {
// write code here
if(root){
tmp.push_back(root->val);
travel(root,sum,root->val);
}
return res;
}
void travel(TreeNode* root,int sum,int cursum){
if(root->left){
tmp.push_back(root->left->val);
travel(root->left,sum,cursum+root->left->val);
tmp.pop_back();
}
if(root->right){
tmp.push_back(root->right->val);
travel(root->right,sum,cursum+root->right->val);
tmp.pop_back();
}
else if(!root->left && !root->right){
if(sum == cursum) res.push_back(tmp);
return;
}
}
};
04
总结
又是一道之前题目的小变体哦。
欢迎评论区留言讨论哦