The thief has found himself a new place for his thievery again. There is only one entrance to this area, called root.
Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that all houses in this place form a binary tree. It will automatically contact the police if two directly-linked houses were broken into on the same night.
Given the root of the binary tree, return the maximum amount of money the thief can rob without alerting the police.
Β
Example 1:
Input: root = [3,2,3,null,3,null,1]
Output: 7
Explanation: Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.
Example 2:
Input: root = [3,4,5,1,3,null,1]
Output: 9
Explanation: Maximum amount of money the thief can rob = 4 + 5 = 9.
Β
Constraints:
The number of nodes in the tree is in the range [1, 104].
0 <= Node.val <= 104
Solutions
Solution 1
1 2 3 4 5 6 7 8 910111213141516
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclassSolution:defrob(self,root:Optional[TreeNode])->int:defdfs(root:Optional[TreeNode])->(int,int):ifrootisNone:return0,0la,lb=dfs(root.left)ra,rb=dfs(root.right)returnroot.val+lb+rb,max(la,lb)+max(ra,rb)returnmax(dfs(root))
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */funcrob(root*TreeNode)int{vardfsfunc(*TreeNode)(int,int)dfs=func(root*TreeNode)(int,int){ifroot==nil{return0,0}la,lb:=dfs(root.Left)ra,rb:=dfs(root.Right)returnroot.Val+lb+rb,max(la,lb)+max(ra,rb)}a,b:=dfs(root)returnmax(a,b)}