ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

337打家劫舍III

2020-08-05 13:01:15  阅读:232  来源: 互联网

标签:right TreeNode root 337 self 不偷 打家劫舍 III 节点


# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
a = TreeNode(3)
b = TreeNode(2)
c = TreeNode(3)
d = TreeNode(3)
e = TreeNode(1)
a.left = b
a.right = c
b.right = d
c.right = e
f = TreeNode(3)
g = TreeNode(3)
h = TreeNode(3)
# 每一个节点都有两种情况,那就是偷和不偷,
# 当前节点偷得值为:左节点不偷的值 + 右节点不偷的值 + 当前节点的值
# 当前节点不偷的值为:左节点最大值 + 右节点最大值;注意这里是最大值,是偷和不偷中最大的那个。
class Solution:
def rob(self, root: TreeNode) -> int:
root_list = self.dfs(root)
return max(root_list)
def dfs(self,root):
# 返回一个列表,第一个代表偷,第二个代表不偷
if not root:
return [0,0]
# 这里left和right都是是一个列表,
left = self.dfs(root.left)
right = self.dfs(root.right)
# 这里当前节点偷得值等于左儿子节点不偷和右儿子节点不偷加上当前节点的值
rob_num = left[1] + right[1] + root.val
# 当前节点不偷,左右节点偷或者不偷的最大值。
not_rob_num = max(left) + max(right)
# 最后同样返回一个列表。
return [rob_num,not_rob_num]

A = Solution()
print(A.rob(a))

标签:right,TreeNode,root,337,self,不偷,打家劫舍,III,节点
来源: https://www.cnblogs.com/cong12586/p/13439102.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有