public int rob1(TreeNode root){
count++;
if(root==null){
return 0;
}//如果根节点为空的话,返回0就可以了
int oneSolution=rob1(root.left)+rob1(root.right);//第一种情况,是不偷取根节点,而选择偷取它的左右子节点的和
//第二种情况,偷取根节点,那就只能继续偷取根节点的左节点的左右节点和右节点的左右节点
int twoSolution=root.val;
if(root.left!=null)
twoSolution+=rob1(root.left.left)+rob1(root.left.right);
if(root.right!=null)
twoSolution+=rob1(root.right.left)+rob1(root.right.right);
//比较这两个情况的收益的大小,将较大的赋值给res
int res=Math.max(oneSolution,twoSolution);
return res;
}
public static void main(String[]args){
TreeNode node1=new TreeNode(3);
TreeNode node2=new TreeNode(4);
TreeNode node3=new TreeNode(5);
TreeNode node4=new TreeNode(1);
TreeNode node5=new TreeNode(3);
TreeNode node6=new TreeNode(1);
// TreeNode node7=new TreeNode(8);
node2.left=node4;node2.right=node5;node3.right=node6;node1.left=node2;node1.right=node3;
System.out.println(new NinetyThree().rob1(node1));
System.out.print(count);
}
老师,我的这个递归的方法,我觉的它的时间复杂度为O(2^n),因为对于每一个节点,都有两种情况,一共有n个节点,所以我觉得应该会有2的n次方种情况,但是我放了几种树到测试用例上,并没有跟我想的一样,搞不懂为什么