深度优先遍历--怎么抓住小偷

前端之家收集整理的这篇文章主要介绍了深度优先遍历--怎么抓住小偷前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

 

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

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,1)">t6)
root=TreeNode(3,t1,t2)

def rob(root):
    a=helper(root)
    return max(a[0],a[])
def helper(root):
    if root == None:
        return (0,0)
    left=helper(root.left)
    right=helper(root.right)
    robval=rot.val+left[1]+right[]
    skipval=max(left[1])+max(right[])
    return (robval,skipval)
输出:9

 

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

 

猜你在找的Python相关文章