假设二叉树采用二叉链表存储结构,试设计一个算法求二叉树的总结点数。(用c语言写)
时间: 2024-02-12 20:05:39 浏览: 92
以下是使用C语言实现的算法,可以求解二叉树的总结点数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
int data;
scanf("%d", &data);
if (data == -1) { // 如果输入-1,表示该节点为空
return NULL;
}
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = data;
root->left = createTree();
root->right = createTree();
return root;
}
// 计算二叉树节点数
int countNodes(TreeNode* root) {
if (root == NULL) { // 如果节点为空,则返回0
return 0;
}
return countNodes(root->left) + countNodes(root->right) + 1; // 递归计算左右子树的节点数,并加上当前节点
}
int main() {
printf("请输入二叉树节点的值,-1表示该节点为空:\n");
TreeNode *root = createTree();
int count = countNodes(root);
printf("二叉树的总结点数为:%d\n", count);
return 0;
}
```
在该算法中,我们首先定义了一个二叉树的结构体,包含一个整型数据、左右子树的指针。然后使用递归的方式创建二叉树,并在递归过程中计算二叉树的节点数。最后打印出节点数即可。
阅读全文