House Robber III
Description
The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "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 forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.
Determine the maximum amount of money the thief can rob tonight without alerting the police.
Example 1:
Input: [3,2,3,null,3,null,1]<font color="red">3</font> / \
2 3 \ \ 3 1 Output: 7 Explanation: Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.
Example 2:
Input: [3,4,5,1,3,null,1]3 /
4 5 / \ \ 1 3 1Output: 9 Explanation: Maximum amount of money the thief can rob = 4 + 5 = 9.
Solution(javascript)
const rob = (root) => {
const memo = new Map()
const aux = (node) => {
if (memo.get(node) !== undefined) {
return memo.get(node)
}
if (!node) {
return 0
}
const grandchildren = []
if (node.left) {
grandchildren.push(node.left.left)
grandchildren.push(node.left.right)
}
if (node.right) {
grandchildren.push(node.right.left)
grandchildren.push(node.right.right)
}
memo.set(node, Math.max(
aux(node.left) + aux(node.right),
grandchildren.reduce((acc, child) => aux(child) + acc, node.val),
))
return memo.get(node)
}
return aux(root, 0)
}