package leetcode;
import java.util.HashMap;
public class demo_337 {
//当前节点值参与计算,所能获取的最大值
HashMap<TreeNode, Integer> t=new HashMap<TreeNode, Integer>();
//当前节点值不参与计算,所能获取的最大值
HashMap<TreeNode, Integer> f=new HashMap<TreeNode, Integer>();
public int rob(TreeNode root) {
if(root==null) {
return 0;
}
backtarce(root);
return Math.max(t.get(root), f.get(root));
}
public void backtarce(TreeNode root) {
if(root!=null) {
backtarce(root.right);
backtarce(root.left);
//当前节点参与计算,则其左右节点不能参与计算
t.put(root, root.val+f.getOrDefault(root.left, 0)+f.getOrDefault(root.right, 0));
//当前节点不参与计算,则各自计算左右子树的最大值的和
f.put(root, Math.max(t.getOrDefault(root.left, 0), f.getOrDefault(root.left, 0))+Math.max(t.getOrDefault(root.right, 0), f.getOrDefault(root.right, 0)));
}
}
}