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

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

http://www.nowcoder.com/practice/840dd2dc4fbd4b2199cd48f2dadf930a

C++ -DFS-

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sumtmp int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > pathSum(TreeNode* root, int sum) {
        // write code here
        // 保存返回值
        vector<vector<int>> res;

        // 临时数组
        vector<int> rettmp;

        // 递归
        dfs(res, rettmp, root, sum, 0);
        return res;
    }


    //对所有路径进行查找,直到结束
    void dfs(vector<vector<int>>&res, vector<int>&rettmp, TreeNode* ROOT, int sum, int tmp) {
        //如果节点为空,返回
        if (ROOT == nullptr) return ;

        //保存值
        int sumtmp = tmp + ROOT->val;
        rettmp.push_back(ROOT->val);

        //如果是叶子节点,判断是否满足要求
        if (ROOT->left == nullptr  && ROOT->right == nullptr ) {
            if (sumtmp == sum) {
                res.push_back(rettmp);//找到一个满足要求的路径
            }
            return ;//返回上一层
        }

        //如果是左子树
        if (ROOT->left) {
            dfs(res, rettmp, ROOT->left, sum, sumtmp);

            //如果左边遍历完了,那么需要回溯一个
            rettmp.pop_back();
        }

        //如果是右子树
        if (ROOT->right) {
            dfs(res, rettmp, ROOT->right, sum, sumtmp);
            //如果右边遍历完了,那么需要回溯一个
            rettmp.pop_back();
        }

    }

};
全部评论

相关推荐

头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务