LeetCode337打家劫舍三

在上次打劫完一條街道之後和一圈房屋後,小偷又發現了一個新的可行竊的地區。這個地區只有一個入口,我們稱之爲“根”。 除了“根”之外,每棟房子有且只有一個“父“房子與之相連。一番偵察之後,聰明的小偷意識到“這個地方的所有房屋的排列類似於一棵二叉樹”。 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。

計算在不觸動警報的情況下,小偷一晚能夠盜取的最高金額。

示例 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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章