c语言求完全二叉树节点个数
时间: 2023-08-04 14:02:53 浏览: 163
计算二叉树的节点数 C++
4星 · 用户满意度95%
在C语言中,求完全二叉树节点个数可以采用以下方法:
1. 定义一个结构体表示二叉树节点,包含左右子节点指针和节点值等信息。
```
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
```
2. 定义一个函数countNodes,用于计算完全二叉树节点个数,函数参数为指向根节点的指针。
```
int countNodes(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftHeight = 0, rightHeight = 0;
struct TreeNode *left = root, *right = root;
while (left) {
leftHeight++;
left = left->left;
}
while (right) {
rightHeight++;
right = right->right;
}
if (leftHeight == rightHeight) {
return (1 << leftHeight) - 1;
} else {
return countNodes(root->left) + countNodes(root->right) + 1;
}
}
```
3. 在countNodes函数中,首先判断根节点是否为空,如果为空则返回0。否则,分别计算左右子树的高度leftHeight和rightHeight。如果leftHeight等于rightHeight,则说明该二叉树是满二叉树,节点个数为(2^leftHeight)-1,直接返回。否则,递归计算左右子树的节点个数,加上根节点1即可。
注意:这里使用了位运算,1<<n等价于2^n。
阅读全文