Given a complete binary tree, count the number of nodes.
完全二叉树,就是除了叶结点都有两个结点。如果左右子树的高度相同,
结点个数为2^h-1。否则可以遍历左右子树的结点和+1.
public int countNodes(TreeNode root) {
int count=0;
int left=leftHeight(root);
int right=rightHeight(root);
if(left==right)
return (1<<left)-1;
return countNodes(root.left)+countNodes(root.right)+1;
}
private int leftHeight(TreeNode node){
if(node==null)
return 0;
int height=0;
while(node!=null){
height++;
node=node.left;
}
return height;
}
private int rightHeight(TreeNode node){
if(node==null)
return 0;
int height=0;
while(node!=null){
height++;
node=node.right;
}
return height;
}