题目: 给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
来源: https://leetcode-cn.com/problems/path-sum-iii/

法一: 自己的代码,   代码超时,原因是计算res的时候,没有用前面的结果,而是每次都重新计算一遍,这个时候一定要把要计算的结果作为参数进行传递,每次都对参数进行计算有几个结果符合.会大大减少计算的次数

# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def pathSum(self, root: TreeNode, su: int) -> int:
results = [0]
def judge(res):
a = []
while res:
a.append(res.pop())
if sum(a) == su:
results[0] = results[0] + 1
def recursion(root,res):
if root is None:
return
res.append(root.val)
# 每次都对res进行求和判断
judge(res[:])
recursion(root.left, res)
recursion(root.right, res)
res.pop()
recursion(root,res=[])
return results[0]

改进后的代码不会超时,

# 执行用时 :180 ms, 在所有 python3 提交中击败了93.22% 的用户
# 内存消耗 :33.4 MB, 在所有 python3 提交中击败了9.56%的用户
class Solution:
def pathSum(self, root: TreeNode, su: int) -> int:
results = [0]
def recursion(root,res):
if root is None:
return
# 先计算有几个满足条件的,再传res.切不可先传过去后计算,那样的话慢了一步,
res = [root.val+i for i in res] + [root.val]
results[0] = results[0] + res.count(su)
# res是可变对象,并且是直接传过去了,但由于res = [root.val+i for i in res] + [root.val]
# 中对res重新进行赋值了,所以函数结束调用后,res中的内容并未改变
recursion(root.left, res)
recursion(root.right,res)
recursion(root,res=[])
return results[0]
if __name__ == '__main__':
duixiang = Solution()
root = TreeNode(5)
a = TreeNode(4)
b = TreeNode(11)
c = TreeNode(2)
d = TreeNode(2)
root.left = a
a.left = b
b.left = c
b.right = d
su = 22
a = duixiang.pathSum(root, su)
print(a)

437路径总和III的更多相关文章

  1. 【LeetCode】437. 路径总和 III

    437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...

  2. Java实现 LeetCode 437 路径总和 III(三)

    437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...

  3. Leetcode 437.路径总和III

    路径总和III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). ...

  4. [LeetCode] 437. 路径总和 III ☆☆☆(递归)

    路径总和 III 描述 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子 ...

  5. 437. 路径总和 III

    方法一:48 ms /* sumUp递归子程序求解以root为根节点的子节点之和为sum的路径数目; pathSum递归部分是把根节点逐一考察,如以root->left,以root->ri ...

  6. leetcode 437. 路径总和 III

    题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...

  7. [二叉树-根到叶的子路径]路径总和 III (两层递归)

    题目437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父 ...

  8. 437 Path Sum III 路径总和 III

    给定一个二叉树,二叉树的每个节点含有一个整数.找出路径和等于给定数的路径总数.路径不需要从根节点开始,也不需要在叶节点结束,当路径方向必须是向下的(只从父节点到子节点).二叉树不超过1000个节点,节 ...

  9. Leetcode题目437:路径总和III(递归-简单)

    题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...

随机推荐

  1. python文件操作-1.将PDF转成Excel

    # https://www.jianshu.com/p/f33233e4c712 import pdfplumber # 为了操作PDF from openpyxl import Workbook w ...

  2. IDEA Debug模式下启动慢的解决办法

    工程没有做什么大的改动,近期Idea在debug模式下启动耗时800s +,run模式下200s.Idea debug模式启动的时候会有这样的提示: 方法断点会戏剧性的降低debug的速度.当时并没有 ...

  3. kafka常见命令

    基础命令 查看已有topic 进入kafka解压目录:/home/zallds/kafka_2.10-0.10.2.1 执行如下命令,就会列出所有topic [zallds@PUBLIC-26 bin ...

  4. chown -R lyd usbsend

    chown -R lyd usbsend chown -R lyd usbsend chown -R lyd usbsend 某一个目录下所有文件授权给lyd

  5. vsto 将图片加入到word里面

    private void AddPictoWord() { string folderpath = @"C:\Users\k0021213\Pictures\QQ浏览器截图"; D ...

  6. Django-csrf中间件

    一.详解csrf原理 csrf要求发送post,put,或者delete请求的时候,是先以get方式发送请求,服务端响应时会分配一个随机字符串给客户端,客户端第二次发送post,put或delete请 ...

  7. css设置元素垂直居中的几个方法

    最近有人问我怎么设置元素垂直居中?我....(这么基础的东西都不会?我有点说不出话来),  不过还是耐心的教了他几个方法,好吧教完他们,顺便把这些方法整理一下 第一种:通过设置成为表格元素的方式来实现 ...

  8. Redis常用数据类型底层数据结构分析

    Redis是一种键值(key-Value)数据库,相对于关系型数据库,它也被叫作非关系型数据库 Redis中,键的数据类型是字符串,但是为了非富数据存储方式,方便开发者使用,值的数据类型有很多 字符串 ...

  9. Windows Server 快速生成免费SSL证书 (letsencrypt)

    最近官网需求部署个SSL证书,一番操作后把借鉴的网站与实际过程记录下来 Let's Encrypt,官网是https://letsencrypt.org/,它是一个由各大公司赞助的公益组织: 有趋势有 ...

  10. Java基础-自增自减运算符练习题

    我们用一个简单的例子分析下边的运行结果: package demo; public class ZiZeng { int i = 0; test(i); // i = i++; i = ++i; Sy ...