题解 | #二叉树根节点到叶子节点和为指定值的路径#
二叉树根节点到叶子节点和为指定值的路径
http://www.nowcoder.com/practice/840dd2dc4fbd4b2199cd48f2dadf930a
比 二叉树中是否存在节点和为指定值的路径要复杂一点,还需要输出路径。
总体思路还是要先遍历,遍历过程中的操作有两种:从sum向下减,减到叶子节点时sum正好为0,表示有这条路径;从0开始加,加到叶子节点时,和正好为sum表示有这条路径。在遍历过程中就需要同时记录路径。
/**
* 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> path;//用于记录单条路径
void dfs(TreeNode* node, int sum)
{//功能函数
if(!node)
{
return;
}
path.push_back(node->val);
sum -= node->val;
if(!node->left && !node->right )
{
if(sum == 0)
{
res.push_back(path);
}
}
dfs(node->left, sum);
dfs(node->right, sum);
sum += node->val;
path.pop_back();
}
vector<vector<int> > pathSum(TreeNode* root, int sum) {
// write code here
//主函数调用dfs函数
dfs(root,sum);
return res;
}
};牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法
