//递归,跟求二叉树的最大深度写法类似 public int countNodes(TreeNode root) { return getNodeNum(root); } public int getNodeNum(TreeNode root){ if(root==null) return 0; int leftNum=getNodeNum(root.left); int rightNum=getNodeNum(root.right); return leftNum+rightNum+1; } //迭代,层序遍历的模板 public int countNodes(TreeNode root) { if(root==null) return 0; Queue<TreeNode> queue=new LinkedList<>(); queue.offer(root); int num=0; while(!queue.isEmpty()){ int size=queue.size(); num+=size; for(int i=0;i<size;i++){ TreeNode node =queue.poll(); if(node.left!=null) queue.offer(node.left); if(node.right!=null) queue.offer(node.right); } } return num; }