在上次打劫完一條街道之後和一圈房屋後,小偷又發現了一個新的可行竊的地區。這個地區只有一個入口,我們稱之爲“根”。 除了“根”之外,每棟房子有且只有一個“父“房子與之相連。一番偵察之後,聰明的小偷意識到“這個地方的所有房屋的排列類似於一棵二叉樹”。 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。
計算在不觸動警報的情況下,小偷一晚能夠盜取的最高金額。
示例 1:
輸入: [3,2,3,null,3,null,1]
3
/ \
2 3
\ \
3 1
輸出: 7
解釋: 小偷一晚能夠盜取的最高金額 = 3 + 3 + 1 = 7.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int robot(TreeNode node){
int a=0;//不選這個節點,思路已經很清晰了
int b=node.val;//選這個節點
//遞歸到葉子節點結束
if(node.left==null&&node.right==null)
return node.val;
//也是分兩種情況
if(node.left!=null){
a=a+robot(node.left);
if(node.left.left!=null){
b=b+robot(node.left.left);
}
if(node.left.right!=null){
b=b+robot(node.left.right);
}
}
if(node.right!=null){
a=a+robot(node.right);
if(node.right.left!=null){
b=b+robot(node.right.left);
}
if(node.right.right!=null){
b=b+robot(node.right.right);
}
}
return Math.max(a,b);
}
public int rob(TreeNode root) {
if(root==null)
return 0;
return robot(root);
}
}