计算一颗给定二叉树的所有结点个数,C语言代码
时间: 2024-03-09 20:49:26 浏览: 85
以下是计算二叉树节点个数的C语言代码:
```c
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
int countNodes(struct TreeNode* root) {
if (root == NULL) { // 如果二叉树为空则返回0
return 0;
}
int left_height = 0, right_height = 0;
struct TreeNode* left_node = root, *right_node = root;
// 计算左右子树高度
while (left_node) {
left_height++;
left_node = left_node->left;
}
while (right_node) {
right_height++;
right_node = right_node->right;
}
// 如果左右子树高度相等,则说明是满二叉树,节点数为2^n-1
if (left_height == right_height) {
return (1 << left_height) - 1;
}
// 不是满二叉树,递归计算左右子树节点数
return countNodes(root->left) + countNodes(root->right) + 1;
}
```
在这里,我们首先判断二叉树是否为空,如果是空树则返回0。接着,我们通过遍历二叉树计算出左右子树的高度,如果两个高度相等,则说明是满二叉树,节点数可以直接计算出来。如果不是满二叉树,则递归计算左右子树的节点数并相加再加上根节点1即可得到总节点数。
阅读全文