用c++编写程序,输入格式: 测试数据有多组,处理到文件尾。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列,其中字符*表示虚结点(对应的子树为空)。 输出格式: 对于每组测试,输出所建立的二叉树中度为2的结点个数。
时间: 2024-05-02 11:16:19 浏览: 177
以下是一份参考代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char data;
struct node *left, *right;
} Node;
int count_degree_two_nodes(Node *root) {
if (!root) {
return 0;
} else if (root->left && root->right) {
return 1 + count_degree_two_nodes(root->left) + count_degree_two_nodes(root->right);
} else {
return count_degree_two_nodes(root->left) + count_degree_two_nodes(root->right);
}
}
Node *build_tree() {
char c = getchar();
if (c == '*') {
return NULL;
}
Node *root = (Node *)malloc(sizeof(Node));
root->data = c;
root->left = build_tree();
root->right = build_tree();
return root;
}
int main() {
Node *root;
while ((root = build_tree()) != NULL) {
printf("%d\n", count_degree_two_nodes(root));
}
return 0;
}
```
对于每组测试数据,我们读入一行先序遍历序列,并通过递归的方式构建二叉树。然后,我们使用 `count_degree_two_nodes` 函数来计算度为2的结点个数。这个函数的实现方式是:如果当前结点的左右子树都非空,则它是一个度为2的结点,递归计算其左右子树中的度为2的结点个数并加上1;否则,递归计算其左右子树中的度为2的结点个数。最后,我们在主函数中不断读入并处理测试数据,直到文件结尾。
阅读全文