在一棵以二叉链表表示的二叉树上,试基于C语言给出统计树中具有度为1的结点数目的算法。写出完整代码,并给出实例
时间: 2024-11-09 14:25:35 浏览: 48
在C语言中,为了统计二叉链表(即二叉树)中度为1的节点数目,你可以遍历整个树,对于每个节点,检查它的左右子节点是否存在。如果只有一个子节点,则该节点的度为1。以下是使用递归方法实现的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点结构体
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点指针
struct TreeNode* right; // 右子节点指针
} Node;
// 判断节点度数的辅助函数
int nodeDegree(Node* node) {
if (node == NULL) return 0;
else return (node->left != NULL && node->right != NULL) ? 2 : (node->left != NULL || node->right != NULL) ? 1 : 0;
}
// 统计度为1的节点总数
int countDegreeOneNodes(Node* root) {
if (root == NULL) return 0;
return countDegreeOneNodes(root->left) + countDegreeOneNodes(root->right) + (nodeDegree(root) == 1);
}
int main() {
// 创建一个简单的二叉树例子
Node* tree = (Node*)malloc(sizeof(Node));
tree->val = 1;
tree->left = (Node*)malloc(sizeof(Node));
tree->left->val = 2;
tree->left->left = NULL;
tree->left->right = NULL;
tree->right = (Node*)malloc(sizeof(Node));
tree->right->val = 3;
tree->right->left = (Node*)malloc(sizeof(Node));
tree->right->left->val = 4;
tree->right->left->left = NULL;
tree->right->left->right = NULL;
tree->right->right = NULL;
printf("Number of degree 1 nodes: %d\n", countDegreeOneNodes(tree));
free(tree); // 释放内存
return 0;
}
```
在这个例子中,`countDegreeOneNodes` 函数会返回树中所有度为1的节点的数量。注意,在实际应用中,你需要处理树的输入,并在完成任务后记得释放动态分配的内存。
阅读全文