TC: O(n) where n is the no. of nodes in the tree
SC: O(n) for using dp map and O(n) for recursive stack space
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
/*
cases for the any give node
//consider
if root.val is considered then we can explore root.left.left , root.left.right , root.right.left and root.right.right
//not consider
if root.val is not considered the we can explore root.left and root.right
return Integer.max(consider, not consider)
*/
public int rob(TreeNode root) {
Map<TreeNode,Integer> dp = new HashMap<>();
return max(root,dp);
}
public int max(TreeNode root,Map<TreeNode,Integer> dp){
if(root ==null )return 0;
if(dp.containsKey(root)) return dp.get(root);
int considerRoot = root.val;
if(root.left!=null){
considerRoot+=max(root.left.left,dp) + max(root.left.right,dp);
}
if(root.right!=null){
considerRoot+=max(root.right.left,dp) + max(root.right.right,dp);
}
int dontConsiderRoot = max(root.left,dp) + max(root.right,dp);
dp.put(root,Integer.max(considerRoot,dontConsiderRoot));
return dp.get(root) ;
}
}
Top comments (0)