LeetCode第112题—路径总和—Python实现

Posted StriveZs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode第112题—路径总和—Python实现相关的知识,希望对你有一定的参考价值。


title: LeetCode No.112

categories:

  • OJ
  • LeetCode

tags:

  • Programing
  • LeetCode
  • OJ

LeetCode第112题—路径总和

自己代码的开源仓库:click here 欢迎Star和Fork 😃

题目描述

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。

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

figure.1

示例 1:

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

figure.2

示例 2:

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

示例 3:

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

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

代码

执行用时:44 ms, 在所有 Python3 提交中击败了94.71%的用户内存消耗:16.6 MB, 在所有 Python3 提交中击败了47.96%的用户

# Definition for a binary tree node.
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution(object):
    flag = False # 全局标志:表示是否存在一条路径数值加和等于目标值
    def sumPath(self, node, curSum, targetSum):
        """
        :param node: 当前节点
        :param curSum: 到当前节点之前的节点数值总和
        :param targetSum: 目标总和
        :return:
        """
        if node == None:
            return
        # 如果到达叶子节点,则进行总和判断
        if node.left == None and node.right == None:
            if curSum + node.val == targetSum:
                self.flag = True
        self.sumPath(node.left,curSum+node.val,targetSum)
        self.sumPath(node.right, curSum + node.val, targetSum)

    def hasPathSum(self, root, targetSum):
        """
        :type root: TreeNode
        :type targetSum: int
        :rtype: bool

        核心思想:
            采用DFS,每当遇到叶子结点,就去计算当前路径总和,如果等于targetSum就将全局标志flag设置为True
        """
        self.sumPath(root,0,targetSum)
        return self.flag

以上是关于LeetCode第112题—路径总和—Python实现的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第113题—路径总和II—Python实现

[leetcode] 113. 路径总和 II

LeetCode-112-路径总和

leetcode-----112. 路径总和

Leetcode112.路径总和

LeetCode112路径总和