JAVA版本
解法一:
递归版本
class Solution {
public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
int left = countNodes(root.left);
int right = countNodes(root.right);
return left+right+1;
}
}
解法二:
广度优先遍历,迭代法
class Solution {
public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
Queue <TreeNode> queue = new LinkedList<>();
queue.add(root);
int result=0; //计算结点的个数
while(!queue.isEmpty()) {
int length = queue.size();
while (length -- > 0) {
TreeNode cur = queue.poll();
result++;
if (cur.left != null) queue.offer(cur.left);
if (cur.right != null) queue.offer(cur.right);
}
}
return result;
}
}
解法三
利用完全二叉数的特性,该解法,笔者没有想出来,也没有学会,记录在此。日后再来学习。
class Solution {
public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
Queue <TreeNode> queue = new LinkedList<>();
queue.add(root);
int result=0; //计算结点的个数
while(!queue.isEmpty()) {
int length = queue.size();
while (length -- > 0) {
TreeNode cur = queue.poll();
result++;
if (cur.left != null) queue.offer(cur.left);
if (cur.right != null) queue.offer(cur.right);
}
}
return result;
}
}