113.路径总和 II

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

叶子节点 是指没有子节点的节点。

示例 1:

113.路径总和 II_第1张图片

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

示例 2:

113.路径总和 II_第2张图片

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:

输入:root = [1,2], targetSum = 0
输出:[]

提示:

  • 树中节点总数在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

vector> result;
vector path;

void traversal(TreeNode *root, int count) {
    //判断是否为叶子结点
    if (!root->left && !root->right && count == 0){
        //递归结束条件满足
        result.push_back(path);
        return;
    }
    //是叶子结点但结果不为0
    if (!root->left && !root->right && count != 0){
        //直接结束即可
        return;
    }
    // 左
    if (root->left){
        //记录遍历数值
        path.push_back(root->left->val);
        count -= root->left->val;
        traversal(root->left,count);
        //回溯
        count += root->left->val;
        //弹出遍历数值
        path.pop_back();
    }

    // 右
    if (root->right){
        path.push_back(root->right->val);
        count -= root->right->val;
        traversal(root->right,count);
        //回溯
        count += root->right->val;
        //弹出遍历数值
            path.pop_back();
        }
}


vector> pathSum(TreeNode *root, int targetSum) {
    if (root == nullptr) return result;
    //放入根节点
    path.push_back(root->val);
    traversal(root, targetSum - root->val);
    return result;
}

你可能感兴趣的:(java,算法,开发语言)