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

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

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-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务