您的位置:首页 > 其它

House Robber

2016-06-24 17:34 309 查看
这道题的意思是任何两个相连接的点不能同时被盗。

所以使用递归就可以了,需要记录每个节点的两种情况:

result数组中存的是每个节点算上自己的当前节点的值result[1]和不算自己当前节点的值reslut[0]的情况。

1、不算自己节点,将比较 (node.left)左孩子 算左节点自己节点和 不算左节点自己节点的,去这两种的最大值,然后在同样比较右节点(node.right)的情况。

2、算自己的节点,将现节点(node)和左孩子的resultl[0]和有孩子的resultr[0]相加。

最后得到根节点的result[0],result[1],最后输出最大值。

附上代码:

public class Solution {
public int rob(TreeNode root) {

int[] result=robCount(root);
return Math.max(result[0],result[1]);
}

public int [] robCount(TreeNode node){

if(node==null) return new int[]{0, 0};

int[] result=new int[2];
int[] resultl=robCount(node.left);
int[] resultr=robCount(node.right);

result[0]=Math.max(resultl[0],resultl[1])+Math.max(resultr[0],resultr[1]);//没有算进当前点
result[1]=node.val+resultl[0]+resultr[0];//当前节点算进去
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: