思路1:递归
终止条件:树无节点,返回0
递归公式:树节点树=根节点+其左子树节点+右子树节点
时间O(N) 空间O(N)
class Solution {
public int countNodes(TreeNode root) {
if(root==null)
{
return 0;
}
return 1+countNodes(root.left)+countNodes(root.right);
}
}
思路2:层序遍历/深度遍历
时间O(N) 空间O(N)
class Solution {
public int countNodes(TreeNode root) {
Queue<TreeNode> queue= new LinkedList();
queue.add(root);
int num=0;
if(root==null)
{
return 0;
}
while(!queue.isEmpty())
{
int len=queue.size();
while(len>0)
{
TreeNode node=queue.poll();
num++;
if(node!=null&&node.left!=null)
{
queue.add(node.left);
}
if(node!=null&&node.right!=null)
{
queue.add(node.right);
}
len--;
}
}
return num;
}
}
思路3:根据完全二叉树的特点【待续】