zoukankan      html  css  js  c++  java
  • 337打家劫舍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))
  • 相关阅读:
    MVC页面打印成pdf插件Rotativa
    lambda表达式嵌套
    MVC+EF五种条件查询获取数据列表方式
    自己写的通用分页存储过程
    Llinux命令大全之软件管理命令
    .net开发 chrome核心浏览器组件
    常用的SQL日期操作
    Linux各版本介绍说明
    大数据环境搭建
    markdown语法链接新页面打开
  • 原文地址:https://www.cnblogs.com/cong12586/p/13439102.html
Copyright © 2011-2022 走看看