解法
完全二叉树可以看作是两个子树,一个是完全二叉树,另一个是满二叉树,满二叉树通过公式可以求得,而小的完全二叉树可以进一步的递归,继续分成下一个完全二叉树和满二叉树。
代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int countNodes(TreeNode root) { if(root==null) return 0; int left=getLevel(root.left); int right=getLevel(root.right); if(left==right) { return countNodes(root.right)+(1<<left); } else { return countNodes(root.left)+(1<<right); } } public int getLevel(TreeNode node) { int level=0; while(node!=null) { node=node.left; level++; } return level; } }