路径总和 II

问题描述

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

示例:
给定如下二叉树,以及目标和 sum = 22,

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

返回:

[
   [5,4,11,2],
   [5,8,4,5]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum-ii

思路

深搜

  • 当节点是叶子节点时,就不用向下继续搜索了。
  • 非叶子节点,左右子树都遍历完以后,就将其从vector中弹出。

详细实现可以在题解中查看,很容易理解的。

题解

class Solution {
public:
    vector<int> vec;
    vector<vector<int>> ret;

    void dfs(TreeNode *node, int sum, int target) {
        if (node->left == nullptr && node->right== nullptr) {
            vec.push_back(node->val);
            sum+=node->val;
            if (sum== target) {
                ret.push_back(vec);
            }
            vec.pop_back();
            return;
        }
        vec.push_back(node->val);
        if(node->left!= nullptr)dfs(node->left, sum + node->val, target);
        if(node->right!= nullptr) dfs(node->right, sum + node->val, target);
        vec.pop_back();
    }

    vector<vector<int>> pathSum(TreeNode *root, int sum) {
        if (root != nullptr) {
            dfs(root, 0, sum);
        }
        return ret;
    }
};

标签: none

添加新评论