zoukankan      html  css  js  c++  java
  • LeetCode 437. 路径总和 III

    437. 路径总和 III

    Difficulty: 中等

    给定一个二叉树,它的每个结点都存放着一个整数值。

    找出路径和等于给定数值的路径总数。

    路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

    二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。

    示例:

    root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
    
          10
         /  
        5   -3
       /     
      3   2   11
     /    
    3  -2   1
    
    返回 3。和等于 8 的路径有:
    
    1.  5 -> 3
    2.  5 -> 2 -> 1
    3.  -3 -> 11
    

    Solution

    Language: ****

    解法一:暴力遍历。空间复杂度为O(1);层序遍历的时间复杂度为O(n),在求每个节点的路径和时候的时间复杂度为O(n) (single sided tree) to O(logn)(balanced tree),所以总的时间复杂度为O(nlogn) to O(n^2)。

    解这道题的时候不能根据LeetCode 113. 路径总和 II - swordspoet - 博客园生搬硬套,113题的要求是从根节点到叶子节点的路径,而本题的要求是路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的。像下图的这种情形,sum为-1的时候路径有4条,而不是113题中获得的3条。

    # 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: TreeNode, sum: int) -> int:
            if not root:
                return 0
            
            queue = [root]
            self.numOfPaths = 0
            while queue:
                size = len(queue)
                for i in range(size):
                    node = queue.pop(0)
                    self.pathSumHelper(node, sum)
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
            return self.numOfPaths
            
        def pathSumHelper(self, root, sum):
            if not root:
                return 0
            if sum == root.val:
                self.numOfPaths += 1
            
            self.pathSumHelper(root.left, sum-root.val)
            self.pathSumHelper(root.right, sum-root.val)
    
  • 相关阅读:
    HTML onblur 事件属性
    插入光标颜色 | caret-color (Basic User Interface) – CSS 中文开发手册
    gc (Runtime) – Python 中文开发手册
    《宾狗》
    《凭什么相信你,我的CNN模型?(篇二:万金油LIME)》
    《凭什么相信你,我的CNN模型?(篇一:CAM和Grad-CAM)》
    《如何利用CAM(类激活图)动态可视化模型的学习过程》
    《Attention最新进展》
    TCP-IP四书五经
    《统计学习方法》
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14092787.html
Copyright © 2011-2022 走看看