leetcode:二叉树中最大路径和(python)

乖乖的函数 2020-11-13 02:57:08
LeetCode 二叉树 二叉 最大 中最


1. 题目描述

给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

示例 1:
输入: [1,2,3]

 1
/ \
2 3

输出: 6

示例 2:
输入: [-10,9,20,null,null,15,7]

 -10
/ \
9 20
/ \
15 7

输出: 42

2. 思路

对于任意一个节点, 如果最大和路径包含该节点, 那么只可能是两种情况:

  1. 其左右子树中所构成的和路径值较大的那个(如果左子树或右子树构成的最大路径和为负数,则置为零,表示最大路径不经过这个子树)加上该节点的值后向父节点回溯构成最大路径,也可能没有左右子树,只有该节点的值往前回溯。
  2. 左右子树都在最大路径中, 加上该节点的值构成了最终的最大路径。即,该节点是最大路径的根节点。

2.1 python 代码

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self): # 定义一个result属性
self.result = float("-inf")
def maxPathSum(self, root: TreeNode) -> int:
if root == None:
return 0
self.getMax(root)
return self.result
def getMax(self,root): # 定义一个辅助函数
if root == None: # 如果当前节点为空就表示包含当前节点的最大路径为0
return 0
# 递归的计算当前节点的左子树和右子树能提供的最大路径和,如果为负,就置为零(和0比较)
left = max(0,self.getMax(root.left))
right = max(0,self.getMax(root.right))
# 每计算一次左右子树的最大值,就更新当前的result
self.result = max(self.result,left + right + root.val)
# 往父节点回溯的话,最大路径就不能同时包含左右两个子树,
# 因此需要用左右子树较大的那个子树加上当前节点的值进行回溯
return max(left,right) + root.val
#(递归函数,返回的是回溯需要的式子,而不是返回最终结果(比如这里的 return result))

ps:一点递归的理解(求纠正)

回溯往往可以用递归来进行实现,当运用递归函数的时候,return的不是函数实现的结果
而是回溯到上层所需要的式子(大部分最终结果和回溯返回所需要的式子是相同的),可能不是这个函数所要实现的最终功能。回溯所需要的式子,以这个题目为例,在定义getMax函数的时候,我们返回的是max(left,right)+ root.val,因为从当前节点回溯到上层父节点的话,需要给上层节点提供由当前节点和某一子树所构成的最大路径和。而最终的结果result是在递归的过程中不断地更新没有作为函数的return。

版权声明
本文为[乖乖的函数]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ggdhs/article/details/92377456

  1. 利用Python爬虫获取招聘网站职位信息
  2. Using Python crawler to obtain job information of recruitment website
  3. Several highly rated Python libraries arrow, jsonpath, psutil and tenacity are recommended
  4. Python装饰器
  5. Python实现LDAP认证
  6. Python decorator
  7. Implementing LDAP authentication with Python
  8. Vscode configures Python development environment!
  9. In Python, how dare you say you can't log module? ️
  10. 我收藏的有关Python的电子书和资料
  11. python 中 lambda的一些tips
  12. python中字典的一些tips
  13. python 用生成器生成斐波那契数列
  14. python脚本转pyc踩了个坑。。。
  15. My collection of e-books and materials about Python
  16. Some tips of lambda in Python
  17. Some tips of dictionary in Python
  18. Using Python generator to generate Fibonacci sequence
  19. The conversion of Python script to PyC stepped on a pit...
  20. Python游戏开发,pygame模块,Python实现扫雷小游戏
  21. Python game development, pyGame module, python implementation of minesweeping games
  22. Python实用工具,email模块,Python实现邮件远程控制自己电脑
  23. Python utility, email module, python realizes mail remote control of its own computer
  24. 毫无头绪的自学Python,你可能连门槛都摸不到!【最佳学习路线】
  25. Python读取二进制文件代码方法解析
  26. Python字典的实现原理
  27. Without a clue, you may not even touch the threshold【 Best learning route]
  28. Parsing method of Python reading binary file code
  29. Implementation principle of Python dictionary
  30. You must know the function of pandas to parse JSON data - JSON_ normalize()
  31. Python实用案例,私人定制,Python自动化生成爱豆专属2021日历
  32. Python practical case, private customization, python automatic generation of Adu exclusive 2021 calendar
  33. 《Python实例》震惊了,用Python这么简单实现了聊天系统的脏话,广告检测
  34. "Python instance" was shocked and realized the dirty words and advertisement detection of the chat system in Python
  35. Convolutional neural network processing sequence for Python deep learning
  36. Python data structure and algorithm (1) -- enum type enum
  37. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)
  38. 【Python进阶】你真的明白NumPy中的ndarray吗?
  39. All questions and answers for algorithm posts of super large factories (recommended system / machine learning / deep learning / C + + / spark / Python)
  40. [advanced Python] do you really understand ndarray in numpy?
  41. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  42. [advanced Python] Python advanced column main readme: never forget the original intention and forge ahead
  43. python垃圾回收和缓存管理
  44. java调用Python程序
  45. java调用Python程序
  46. Python常用函数有哪些?Python基础入门课程
  47. Python garbage collection and cache management
  48. Java calling Python program
  49. Java calling Python program
  50. What functions are commonly used in Python? Introduction to Python Basics
  51. Python basic knowledge
  52. Anaconda5.2 安装 Python 库(MySQLdb)的方法
  53. Python实现对脑电数据情绪分析
  54. Anaconda 5.2 method of installing Python Library (mysqldb)
  55. Python implements emotion analysis of EEG data
  56. Master some advanced usage of Python in 30 seconds, which makes others envy it
  57. python爬取百度图片并对图片做一系列处理
  58. Python crawls Baidu pictures and does a series of processing on them
  59. python链接mysql数据库
  60. Python link MySQL database