题解 | #二叉树根节点到叶子节点和为指定值的路径#

二叉树根节点到叶子节点和为指定值的路径

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;
    }
};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

11-02 20:23
济南大学 Java
点赞 评论 收藏
分享
求问:27届找Java开发实习学完微服务够用吗?
程序员卤馆:理论上不用微服务都够了,项目吃透其实是要花很多时间的,不是说看一遍视频就觉得自己会了,学原理背八股和刷算法题也是要很多时间的。
点赞 评论 收藏
分享
去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
哪个好一点
败哭:我感觉校园经历不是对口的感觉没必要,项目经历没有具体数值代表产出,自我评价过多
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务