不使用stack库用C实现 二叉树的统计 count.cpp • 输入格式:第一行一串字符 • 这串字符表示扩展二叉树的前序序列,其中空结点用#表示 • 输出格式: 一个整数 代表二叉树的仅有一个孩子的节点的个数。
时间: 2024-02-27 21:58:42 浏览: 16
好的,我会尽力回答你的问题。以下是使用C语言实现二叉树的统计 count.cpp 的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
char ch;
scanf("%c", &ch);
if (ch == '#') {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = ch;
root->left = createTree();
root->right = createTree();
return root;
}
// 统计仅有一个孩子的节点的个数
int count(TreeNode* root) {
if (root == NULL) {
return 0;
}
int cnt = 0;
if (root->left == NULL && root->right != NULL) {
cnt++;
}
if (root->left != NULL && root->right == NULL) {
cnt++;
}
return cnt + count(root->left) + count(root->right);
}
int main() {
TreeNode* root = createTree();
printf("%d\n", count(root));
return 0;
}
```
以上代码实现了二叉树的创建和统计仅有一个孩子的节点的个数。在主函数中,我们先创建二叉树,再调用 count 函数统计满足条件的节点个数,并将结果输出。
注意,在输入序列时,我们使用 # 表示空节点。在 count 函数中,我们使用递归的方式遍历二叉树,统计仅有一个孩子的节点的个数。具体来说,如果一个节点的左孩子为空,右孩子不为空,或者左孩子不为空,右孩子为空,那么这个节点就是符合条件的节点。最后,我们将符合条件的节点个数累加起来即可。
希望以上解答能够帮助到你,如果还有疑问,请随时提出。