用c编译如下问题根据带虚结点的先序序列建立二叉树,再统计输出二叉树中具有度为1的结点数目。;要求:代码简洁
时间: 2024-03-25 18:35:26 浏览: 61
以下是使用C语言编写的简洁代码,实现根据带虚结点的先序序列建立二叉树,并统计输出二叉树中具有度为1的结点数目:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode *lchild, *rchild;
} TreeNode, *Tree;
// 创建二叉树
Tree CreateTree() {
char ch;
scanf("%c", &ch);
if (ch == '#') {
return NULL;
}
Tree T = (Tree)malloc(sizeof(TreeNode));
T->data = ch;
T->lchild = CreateTree();
T->rchild = CreateTree();
return T;
}
// 统计度为1的结点数目
int CountDegreeOneNodes(Tree T) {
if (T == NULL) {
return 0;
} else if (T->lchild == NULL && T->rchild != NULL) {
return 1 + CountDegreeOneNodes(T->rchild);
} else if (T->lchild != NULL && T->rchild == NULL) {
return 1 + CountDegreeOneNodes(T->lchild);
} else {
return CountDegreeOneNodes(T->lchild) + CountDegreeOneNodes(T->rchild);
}
}
int main() {
printf("请输入带虚结点的先序序列:\n");
Tree T = CreateTree();
printf("度为1的结点数目为:%d\n", CountDegreeOneNodes(T));
return 0;
}
```
使用方法:
运行程序后,输入带虚结点的先序序列,例如:`AB#C##DE#G##F###`,其中字符`#`表示空结点。程序会先根据输入的先序序列建立二叉树,然后统计输出二叉树中具有度为1的结点数目。
阅读全文