题目: 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

来源: https://leetcode-cn.com/problems/path-sum-ii/

法一: 自己的代码, 没有官方题解

思路: 递归实现,类似前序遍历

# 执行用时 :44 ms, 在所有 python3 提交中击败了99.18% 的用户
# 内存消耗 :14.2 MB, 在所有 python3 提交中击败了98.55%的用户
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
from typing import List
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
results = []
res= []
s = 0
def recursion(root,s):
# 如果遍历到一个分支的底了,则为空节点,返回True,继续遍历
if root == None:
return True
res.append(root.val)
# 注意不传s不行,全局变量s指向不可变对象,只能在里面调用,不能修改
s = s + root.val
a = recursion(root.left,s)
b = recursion(root.right,s)
# 如果到叶节点了,且和也满足条件,则存储
if a and b:
if s == sum:
results.append(res[:])
s = s - root.val
# 注意这里res是个全局变量,且因为指向可变对象所以可以修改,每次函数结束时,res中的
# 内容不会自定返回到调用前的状态,所以需要出栈来恢复状态
res.pop()
recursion(root,s)
return results
if __name__ == '__main__':
duixiang = Solution() root = TreeNode(8)
a = TreeNode(4)
b = TreeNode(9)
root.left = a
root.right = b al = TreeNode(3)
ar = TreeNode(6)
a.left = al
a.right = ar arl = TreeNode(5)
arr = TreeNode(7)
ar.left = arl
ar.right = arr
sum = 17
a = duixiang.pathSum(root,sum)
print(a)

最新文章

  1. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
  2. C++笔记(一)
  3. queue
  4. thinkphp- 许愿墙-1
  5. Dapper ORM 用法—Net下无敌的ORM(转)
  6. python package list
  7. Java多态的体现之接口
  8. Android(java)学习笔记174:SharedPreferences(轻量级存储类)
  9. 怎样在Swift中使用CocoaPods-b
  10. 用反射,将DataRow行转为Object对象
  11. Recover Polygon (easy)
  12. input 显示/隐藏密码
  13. java连接mysql以及增删改查操作
  14. VB.NET版机房收费系统---外观层如何写
  15. Java笔试题库之选题题篇【71-140题】
  16. Exp1 PC平台逆向破解
  17. 在Ubuntu下进行XMR Monero(门罗币)挖矿的超详细图文教程
  18. ABP中的拦截器之ValidationInterceptor(上)
  19. 巧用这19条MySQL优化,效率至少提高3倍
  20. URIError: Failed to decode param '/%PUBLIC_URL%/favicon.ico'

热门文章

  1. golang 结构体嵌入和匿名成员
  2. redis事务(转载)
  3. Kendo UI for jQuery使用教程——创建自定义捆绑包
  4. SQLSERVER 连接常见问题
  5. oracle-linux7 镜像地址 secuCRT 注册-linux内核
  6. jQuery_页面加载问题
  7. PyCharm中Qt Designer+PyUIC配置
  8. BZOJ 4849 [NEERC2016]Mole Tunnels (模拟费用流)
  9. js+jq 淡入淡出轮播(点击+定时+鼠标进入移出事件)
  10. linux下面实时查看进程,内存以及cpu使用情况使用命令