标签:right val self 124 二叉树 root 节点 104 left
我最想刷的递归又来啦,待我先去好好研究一下。
据说T124是T104的进阶,所以先去刷下104
104:
顶层: 即在真正的root节点上,我要返回的是一个数字,而且要比我的左右节点返回的深度大1
def maxDepth(self,root):
return max(maxDepth(root.left)+1,maxDepth(root.right)+1)
底层:当遇到叶子节点时候,深度为1,其左右的None 深度为0,所以basecase 应该是叶子节点的再下一层,不要搞错了。
if not root:
return 0
124: 本题还行,只是求最大路径和,是一个数字,不像我们之前的assignment,直接求最大路径,那个时候的全球变量就要用一个list了
def maxDepth(self,root):
#这里考虑到不一定要到根节点,所以定义了self.res,随时更新 left+right+self.val的值,最后取整个递归过程中最大的一条路径的和。
self.res = float('-inf')
def helper(root):
#底层: 如果递归到叶子节点的下一层,则返回None的val 0
if not root:
return 0
#顶层: 取 left,right,0中最大的那条路径 与 根节点的val相加,并上传路径
left = max(helper(root.left),0)
right = max(helper(root.right),0)
self.res = max(self.res,left+right+root.val)
return max(left,right) + root.val
helper(root)
return self.res
对比104与124:
两道题底层都一样,都返回int :0
顶层递归不一样,104中由于层数肯定大于0,只需要比较 left+1(本层val) 和 right+1(本层val)
124中不仅要取 Left + root.val 和 right + root.val 还要保证 left 和 right >0
124最后再通过一个 全局变量来取 整个递归过程中的 最大值, 全剧终。
标签:right,val,self,124,二叉树,root,节点,104,left 来源: https://www.cnblogs.com/ChevisZhang/p/12236030.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。