zoukankan      html  css  js  c++  java
  • 深度优先遍历怎么抓住小偷

    问题描述:每栋别墅以二叉树的结构建立,每个节点的值是财富值,小偷不能够偷相接的别墅,问小偷最多能够偷多少财富值?

    有个规律:每一个节点的偷值都是:左侧子节点的不偷值+右侧子节点的不偷值+该节点的值;不偷值:左侧子节点的最大值+右侧子节点的最大值。我们可以先深度优先遍历到每一个叶子节点,再依此计算。

    class TreeNode:
        de __init(self,x,left=None,right=None):
            self.val=x
            self.left=left
            self.right=right
    t3=TreeNode(1);t4=TreeNode(3);t6=TreeNode(1)
    t1=TreeNode(4,t3,t4);t2=TreeNode(5,left=None,right=t6)
    root=TreeNode(3,t1,t2)
    
    def rob(root):
        a=helper(root)
        return max(a[0],a[1])
    def helper(root):
        if root == None:
            return (0,0)
        left=helper(root.left)
        right=helper(root.right)
        robval=rot.val+left[1]+right[1]
        skipval=max(left[0],left[1])+max(right[0],right[1])
        return (robval,skipval)
    输出:9

    主要考察建模能力以及实现能力。

  • 相关阅读:
    react 样式继承 属性传递
    react css-in-js
    react 利用高阶组件给页面加上动画
    react路由过渡动画效果
    REACT列表过度
    react 过渡动画组件
    VueJs之计算属性
    VueJs之判断与循环
    VusJs之入门
    MYSQL之数据报表
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11637756.html
Copyright © 2011-2022 走看看