LeetCode337. 打家劫舍 III

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public Map<TreeNode,Integer> trueCache = new HashMap<TreeNode,Integer>();
    public Map<TreeNode,Integer> falseCache = new HashMap<TreeNode,Integer>();
    public int dfs(TreeNode root,boolean canRob) {
        if(root == null)
            return 0;
        if(canRob && trueCache.containsKey(root))
            return trueCache.get(root);
        if(!canRob && falseCache.containsKey(root))
            return falseCache.get(root);
        int ans = 0;
        if(canRob)
            ans = Math.max(ans,
                           root.val + dfs(root.left,false) + dfs(root.right,false));
        ans = Math.max(ans,
                       dfs(root.left,true) + dfs(root.right,true));
        if(canRob) 
            trueCache.put(root,ans);
        if(!canRob) 
            falseCache.put(root,ans);
        return ans;
    }
    public int rob(TreeNode root) {
        return dfs(root,true);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券