答案是递归法最常用,定义TreeNode结构后,通过判断根节点是否为空,返回1加左右子树节点数之和,实现简洁高效。

在C++中统计二叉树的节点个数,最常用的方法是通过递归遍历整棵树。只要每个节点都被访问一次,就可以准确计数。
从根节点开始,每遇到一个节点就加1,然后递归计算左子树和右子树的节点数之和。
定义二叉树节点结构:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
统计节点个数的递归函数:
立即学习“C++免费学习笔记(深入)”;
int countNodes(TreeNode* root) {
if (root == nullptr) {
return 0;
}
return 1 + countNodes(root->left) + countNodes(root->right);
}
说明:如果当前节点为空,返回0;否则返回1(当前节点)加上左右子树的节点总数。
也可以用队列实现广度优先遍历,逐个访问节点并计数。
#include <queue>
int countNodesIterative(TreeNode* root) {
if (root == nullptr) return 0;
<pre class='brush:php;toolbar:false;'>std::queue<TreeNode*> q;
q.push(root);
int count = 0;
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
count++;
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
return count;}
说明:利用队列保存待访问的节点,每次出队一个节点就计数加1,并将其子节点入队。
如果是完全二叉树,可以通过判断左右子树高度来减少递归调用,将时间复杂度优化到 O(log²n)。
基本思路:若左右子树高度相同,则左子树为满二叉树,可用公式计算节点数;否则右子树为满二叉树减去部分节点。
这种优化适用于特定场景,一般情况使用简单递归即可。
基本上就这些。普通二叉树推荐使用递归方法,代码简洁且易于理解。遇到特殊结构再考虑优化策略。
以上就是c++++中如何求二叉树节点个数_c++二叉树节点数量统计方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号