简直不会做(
递归看root的高度h和 左右子的高度 假如右子高度是h-1 说明最后一个节点在右子中 这样的话root + left大小是 2 ^ h 根据等比数列求和算出来的 再加上递归右子的count(right)
假如右子高度不是h-1说明最后一个node在左子中, 就是root + right 大小 这时候righ是完整的 总共 2 ^ h-1 也是等比求和 再递归左子
注意 << 这个符号的precedence很低 要加括号!!!
public class Solution {
public int countNodes(TreeNode root) {
int h = height ( root );
if ( h < 0 )
return 0;
int right = height ( root.right );
int count = 0;
if ( right == h - 1 ){
count = ( 1 << h ) + countNodes ( root.right );
}
else
count = ( 1 << h - 1) + countNodes ( root.left );
return count;
}
public int height ( TreeNode node ){
if ( node == null )
return -1;
return 1 + height ( node.left );
}
}