113. 路径总和 II Python

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
      • 示例 3
  • 二、代码
  • 三、解题思路


一、题目描述

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

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

示例 1

113. 路径总和 II Python_第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 Python_第2张图片

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

示例 3

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

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

二、代码

代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def pathSum(self, root: Optional[TreeNode], targetSum: int) -> List[List[int]]:
        result = []
        def Sum(root,path):
            now_path = path.copy()
            now_path.append(root.val)
            if sum(now_path) == targetSum : #如果当前路径总和与目标相同,分2种情况
                    if root.left == None and root.right == None: # 当前节点是叶子结点
                        result.append(now_path)
                        print("result:",result)
                        return
                    else:# 不是叶子结点 ,继续遍历
                        if root.left:
                            Sum(root.left,now_path)
                        if root.right:
                            Sum(root.right,now_path)
            if sum(now_path) != targetSum: #路径总和与目标不同,继续遍历
                if root.left != None:
                    Sum(root.left,now_path)
                if root.right != None:
                    Sum(root.right,now_path)
                
        if root == None:
            return result
        Sum(root,[])
        print(result)
        return result

三、解题思路

本题基于对二叉树的遍历上进行判断,需要记录每一条从根节点到叶子结点路径的总和,本题解大致思路是遍历每一条到叶子结点的路径,用数组path记录当前路径。
需要注意的点有2个:
①该二叉树并不是一个搜索树,左右子树结点值完全随机,没有规律可言,所以必须从根节点到叶节点全部遍历;
②题目要求根节点到叶结点的路径和为目标值,在正常的遍历判断中,如果当前满足路径之和是目标值,还需要判断当前节点是不是叶节点。
最后将满足条件的当前路径path添加进入result中,返回result数组即可。

你可能感兴趣的:(LeetCode中等难度题集,python,算法,数据结构)