题解 | #二叉树根节点到叶子节点和为指定值的路径#
二叉树根节点到叶子节点和为指定值的路径
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; } };
牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法