zoukankan      html  css  js  c++  java
  • leetcode113 Path Sum II

      1 """
      2 Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
      3 Note: A leaf is a node with no children.
      4 Example:
      5 Given the below binary tree and sum = 22,
      6       5
      7      / 
      8     4   8
      9    /   / 
     10   11  13  4
     11  /      / 
     12 7    2  5   1
     13 Return:
     14 [
     15    [5,4,11,2],
     16    [5,8,4,5]
     17 ]
     18 """
     19 """
     20 此题好题:写三种解法
     21 解法一:recursive
     22 """
     23 class TreeNode:
     24     def __init__(self, x):
     25         self.val = x
     26         self.left = None
     27         self.right = None
     28 class Solution1:
     29     def pathSum(self, root, sum):
     30         if not root:
     31             return []
     32         res = []
     33         path = []
     34         self.recursive(root, res, sum, path)
     35         return res
     36     def recursive(self, root, res, sum, path):
     37         if not root.left and not root.right and sum == root.val:
     38             path.append(root.val)
     39             res.append(path)
     40         if root.left:
     41             self.recursive(root.left, res, sum-root.val, path+[root.val])
     42         if root.right:
     43             self.recursive(root.right, res, sum-root.val, path+[root.val])
     44 """
     45 解法二:DFS
     46 """
     47 class Solution2:
     48     def pathSum(self, root, s): #注意这里,将原本的sum改为s了
     49         if not root:
     50             return []
     51         stack = []
     52         res = []
     53         stack.append((root, [root.val]))
     54         while stack:
     55             root, path = stack.pop()
     56             if not root.left and not root.right and sum(path) == s: #!!!关键点
     57                 res.append(path)
     58             if root.left:
     59                 stack.append((root.left, path+[root.left.val]))
     60             if root.right:
     61                 stack.append((root.right, path+[root.right.val]))
     62         return res
     63 """
     64 解法三:BFS
     65 """
     66 class Solution3:
     67     def pathSum(self, root, s):
     68         if not root:
     69             return []
     70         queue = []
     71         res = []
     72         queue.append((root, [root.val]))
     73         while queue:
     74             root, path = queue.pop(0)  #队列和栈的区别在这
     75             if not root.left and not root.right and sum(path) == s:
     76                 res.append(path)
     77             if root.left:
     78                 queue.append((root.left, path+[root.left.val]))
     79             if root.right:
     80                 queue.append((root.right, path+[root.right.val]))
     81         return res
     82 if __name__ == '__main__':
     83     l1 = TreeNode(5)
     84     l2 = TreeNode(4)
     85     l3 = TreeNode(8)
     86     l4 = TreeNode(11)
     87     l5 = TreeNode(5)
     88     l6 = TreeNode(13)
     89     l7 = TreeNode(4)
     90     l8 = TreeNode(7)
     91     l9 = TreeNode(2)
     92     l10 = TreeNode(1)
     93     l1.left = l2
     94     l1.right = l3
     95     l2.left = l4
     96     l3.left = l6
     97     l3.right = l7
     98     l7.left = l5
     99     l4.left = l8
    100     l4.right = l9
    101     l7.right = l10
    102     ans = Solution3()
    103     print(ans.pathSum(l1, 22))
  • 相关阅读:
    asp搜索两个以上的词的原理
    ASP连接MYSQL数据库
    一个用ASP生成html的新方法
    文本框随文本的长度而增长
    ASP实现https和http之间转化
    ASP根据IP来判断跳转页面
    Access数据库在线压缩的实现方法
    aspjpeg 半透明描边的实现函数
    Session对象的集合
    react tsx
  • 原文地址:https://www.cnblogs.com/yawenw/p/12390474.html
Copyright © 2011-2022 走看看