Count Complete Tree Nodes
Given a complete binary tree, count the number of nodes.
Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.
2. Get the height of the right subtree, if the height of the right subtree just one less than that of the whole tree, then the last node on the last row should be at the right subtree, the number of nodes on the left subtree plus the root should be 2^h and recursively get the number of nodes on the right subtree. If the height of the right subtree is not one less than that of the whole tree, than the last node on the last row should be at the left subtree, the number of nodes on the right subtree plus the root should be 2^(h-1) and recursively get the number of the nodes on the left subtree.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int countNodes(TreeNode root) {
int h = height(root);
return h < 0 ? 0 :
height(root.right) == h-1 ? (1 << h) + countNodes(root.right)
: (1 << h-1) + countNodes(root.left);
}
private int height(TreeNode root) {
return root == null ? -1: height(root.left) + 1;
}
}