zoukankan      html  css  js  c++  java
  • LeetCode--112--路径总和

     问题描述:

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

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

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

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

    返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2

    错误:

     1 class Solution(object):
     2     def hasPathSum(self, root, sum):
     3         """
     4         :type root: TreeNode
     5         :type sum: int
     6         :rtype: bool
     7         """
     8         def preOrder(self,root,sum,temp_sum): 
     9             if self.flag:
    10                 return self.flag
    11             elif root and not self.flag:
    12                 temp_sum += root.val 
    13                 if not root.left and not root.right:          
    14                     if sum == temp_sum:
    15                         self.flag = True  
    16                         return 
    17                     else :
    18                         temp_sum -= root.val
    19                         self.flag = False
    20             if root == None:
    21                 return
    22                 preOrder(self,root.left,sum,temp_sum)
    23                 preOrder(self,root.right,sum,temp_sum)
    24         self.flag = False
    25         return preOrder(self,root,sum,0)

     改正:

     1 class Solution(object):
     2     def hasPathSum(self, root, sum):
     3         """
     4         :type root: TreeNode
     5         :type sum: int
     6         :rtype: bool
     7         """
     8         self.flag = False
     9         def preOrder(self,root,sum,temp_sum): 
    10             if not self.flag:
    11                 if root:
    12                     temp_sum += root.val 
    13                     if root.left or root.right:                       
    14                         preOrder(self,root.left,sum,temp_sum)
    15                         preOrder(self,root.right,sum,temp_sum)
    16                     else:
    17                         if sum == temp_sum:
    18                             self.flag = True
    19                         else:
    20                             temp_sum -= root.val
    21         if root:
    22             preOrder(self,root,sum,0)
    23         return self.flag

    参考:

     1 class Solution(object):
     2     def hasPathSum(self, root, sum):
     3         """
     4         :type root: TreeNode
     5         :type sum: int
     6         :rtype: bool
     7         """
     8         self.flag = False
     9         def dfs(node,sumNow = 0,target = sum):
    10             if not self.flag:
    11                 if node:
    12                     sumNow += node.val
    13                     if node.left or node.right:
    14                         dfs(node.left, sumNow, target)
    15                         dfs(node.right, sumNow, target)
    16                     else:
    17                         if sumNow == target:
    18                             self.flag = True
    19         if root:
    20             dfs(root)
    21         return self.flag

    官方:

     1 class Solution(object):
     2     def hasPathSum(self, root, sum):
     3         """
     4         :type root: TreeNode
     5         :type sum: int
     6         :rtype: bool
     7         """
     8         if root is None:
     9             return False
    10         if root.left is None and root.right is None:
    11             return root.val == sum
    12         if root.left == None:
    13             return self.hasPathSum(root.right,sum - root.val)
    14         if root.right == None:
    15             return self.hasPathSum(root.left,sum - root.val)
    16         return self.hasPathSum(root.left,sum - root.val) or self.hasPathSum(root.right,sum - root.val)

    2018-09-10 20:54:47

  • 相关阅读:
    编译 | 更新标准库_交叉编译工具链
    论文 | 图文_学科
    编码 | 二进制格式设计方案
    图片 | 图片上传管理
    进程 | 查询进程中包含多少线程
    第二周02:Fusion ICP逐帧融合
    exe文件当前目录搜索文件
    第一周:读取XML深度数据并将其重建为三维点云
    第二周:01 ICP迭代交互
    C++文件读写(转载)
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/9622423.html
Copyright © 2011-2022 走看看