题 【编程】在一棵以二叉链表表示的二叉树上,试基于C语言给出统计树中具有度为1的结点数目的算法。(请直接粘贴代码和运行结果截图)
时间: 2024-11-15 19:33:45 浏览: 19
在C语言中,我们可以采用递归的方式来遍历这棵二叉链表并统计度为1的节点数目。这里提供一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉链表节点结构
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 计算度为1的节点函数
int countLeaves(Node* root) {
if (root == NULL) return 0; // 如果节点为空,则返回0
// 如果节点是叶子节点(左右孩子都为空),则计数加1
if (root->left == NULL && root->right == NULL)
return 1;
// 否则,分别递归计算左子树和右子树的叶子节点数目,并相加
return countLeaves(root->left) + countLeaves(root->right);
}
// 测试代码
int main() {
// 创建一个示例二叉树
Node* root = malloc(sizeof(Node));
root->data = 1;
root->left = malloc(sizeof(Node));
root->left->data = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = malloc(sizeof(Node));
root->right->data = 3;
root->right->left = malloc(sizeof(Node));
root->right->left->data = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = NULL;
int leafCount = countLeaves(root);
printf("The number of leaves in the tree is: %d\n", leafCount);
free(root); // 释放内存
return 0;
}
```
运行这个程序后,假设输入的是上面的示例树,输出将会是叶子节点的数目。由于这是一个简化的例子,实际的运行结果截图需要你自己在本地环境测试。
阅读全文