不搶劫該節點,則可以搶劫該節點的左右字節點(注意,node節點不搶不意味著一定要搶它的左右子結點,所以在方法中應該呼叫rob方法,而不是robinclude方法)
public int robexclude(treenode node)
return rob(node.left) + rob(node.right);
}搶劫該節點的話就不能搶劫該節點的左右子節點,所以應該呼叫robexclude(node.right) + robexclude(node.left) + 該節點的值
public int robinclude(treenode node)return robexclude(node.right) + robexclude(node.left) + node.val;
}最後統一呼叫rob方法來獲取能搶劫的最大值,那就有兩種選擇,搶劫根節點和不搶劫根節點
所以
public int rob(treenode root)return math.max(robexclude(root), robinclude(root));
}
選取最大的那個方案就是能打劫的最多的值。
**:class treenode
}class solution
return math.max(robexclude(root), robinclude(root));
}public int
robexclude(treenode node)
return rob(node.left) + rob(node.right);
}public int
robinclude(treenode node)
return robexclude(node.right) + robexclude(node.left) + node.val;}
}小偷又發現乙個新的可行竊的地點。 這個地區只有乙個入口,稱為「根」。 除了根部之外,每棟房子有且只有乙個父房子。 一番偵察之後,聰明的小偷意識到「這個地方的所有房屋形成了一棵二叉樹」。 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。
在不觸動警報的情況下,計算小偷一晚能盜取的最高金額。
LeetCode337 打家劫舍
在上次打劫完一條街道之後和一圈房屋後,小偷又發現了乙個新的可行竊的地區。這個地區只有乙個入口,我們稱之為 根 除了 根 之外,每棟房子有且只有乙個 父 房子與之相連。一番偵察之後,聰明的小偷意識到 這個地方的所有房屋的排列類似於一棵二叉樹 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。計...
Leetcode 337 打家劫舍 III
在上次打劫完一條街道之後和一圈房屋後,小偷又發現了乙個新的可行竊的地區。這個地區只有乙個入口,我們稱之為 根 除了 根 之外,每棟房子有且只有乙個 父 房子與之相連。一番偵察之後,聰明的小偷意識到 這個地方的所有房屋的排列類似於一棵二叉樹 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。計...
leetcode337 打家劫舍 III
在上次打劫完一條街道之後和一圈房屋後,小偷又發現了乙個新的可行竊的地區。這個地區只有乙個入口,我們稱之為 根 除了 根 之外,每棟房子有且只有乙個 父 房子與之相連。一番偵察之後,聰明的小偷意識到 這個地方的所有房屋的排列類似於一棵二叉樹 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。計...