222. Count Complete Tree Nodes
题目大意
Given the root of a complete binary tree, return the number of the nodes in the tree.
According to Wikipedia, every level, except possibly the last, is completely filled in a complete binary tree, and all nodes in the last level are as far left as possible. It can have between 1 and 2^h nodes inclusive at the last level h.
Design an algorithm that runs in less than O(n) time complexity.
中文释义
给定一个完全二叉树的根节点,返回树中节点的数量。
根据维基百科,除最后一层外,完全二叉树的每一层都完全填满,且最后一层的所有节点尽可能地靠左。最后一层 h 可以包含 1 到 2^h 个节点。
设计一个时间复杂度低于 O(n) 的算法。
示例
示例 1:
输入: root
= [1,2,3,4,5,6]
输出: 6
示例 2:
输入: root
= []
输出: 0
示例 3:
输入: root
= [1]
输出: 1
限制条件
- 树中节点的数量范围是
[0, 5 * 10^4]
。 0 <= Node.val <= 5 * 10^4
- 该树保证是完全二叉树。
解题思路
方法
该方法使用递归遍历二叉树的每个节点,计算树中节点的总数。
-
递归终止条件:
- 如果当前节点为空,返回 0。
-
计算节点数:
- 递归调用
countNodes
函数分别计算左子树和右子树的节点数。 - 将左子树的节点数与右子树的节点数相加,并加上当前节点(1个节点)。
- 递归调用
-
返回节点总数:
- 返回计算得到的节点总数。
代码
class Solution {
public:
int countNodes(TreeNode* root) {
if (root == nullptr) return 0;
return countNodes(root -> left) + countNodes(root -> right) + 1;
}
};