222.完全二叉树节点个数
思路
1.用求二叉树节点个数来做,递归求左右两个子树节点个数+1
2.层序遍历,每入队列一个节点,节点数加1
3.利用完全二叉树可能包含满二叉树的性质,优化根节点为满二叉树的便利节点数
总结
前两个解法比较简单,容易想到,三个不容易想到,利用了满二叉树的性质。
代码
public int countNodes(TreeNode root) {
if(root==null) return 0;
TreeNode node=root;
int leftdep=1,rightdep=1;
while (node.left!=null) {
node=node.left;
leftdep++;
}
node=root;
while (node.right!=null){
node=node.right;
rightdep++;
}
if (leftdep==rightdep){
return (int) (Math.pow(2,leftdep)-1);
}
return countNodes(root.left)+countNodes(root.right)+1;
}