根据带虚结点的先序序列建立二叉树,再统计输出二叉树中具有度为1的结点数目。用c语言编译
时间: 2024-03-25 11:35:24 浏览: 72
以下是使用C语言编写的代码,实现根据带虚结点的先序序列建立二叉树,并统计输出二叉树中具有度为1的结点数目:
```c
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef char ElemType;
typedef struct TreeNode {
ElemType data;
struct TreeNode *lchild, *rchild;
} TreeNode, *Tree;
// 栈结构体定义
typedef struct Stack {
Tree data[MaxSize];
int top;
} Stack;
// 初始化栈
void InitStack(Stack *S) {
S->top = -1;
}
// 判断栈是否为空
int IsEmpty(Stack S) {
return S.top == -1;
}
// 入栈
void Push(Stack *S, Tree x) {
if (S->top == MaxSize - 1) {
printf("栈已满,无法入栈!\n");
return;
}
S->data[++S->top] = x;
}
// 出栈
Tree Pop(Stack *S) {
if (IsEmpty(*S)) {
printf("栈已空,无法出栈!\n");
return NULL;
}
return S->data[S->top--];
}
// 先序遍历建立二叉树
void CreateTree(Tree *T) {
ElemType ch;
scanf("%c", &ch);
if (ch == '#') {
*T = NULL;
} else {
*T = (Tree)malloc(sizeof(TreeNode));
(*T)->data = ch;
CreateTree(&((*T)->lchild));
CreateTree(&((*T)->rchild));
}
}
// 统计度为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() {
Tree T;
Stack S;
InitStack(&S);
printf("请输入带虚结点的先序序列:\n");
CreateTree(&T);
printf("度为1的结点数目为:%d\n", CountDegreeOneNodes(T));
return 0;
}
```
使用方法:
运行程序后,输入带虚结点的先序序列,例如:`AB#C##DE#G##F###`,其中字符`#`表示空结点。程序会先根据输入的先序序列建立二叉树,然后统计输出二叉树中具有度为1的结点数目。
阅读全文