C语言完成先序创建或者层序创建二叉链表函数的编写 ; 完成二叉树中序遍历函数的编写(参考先序遍历函数); 创建如下二叉树的二叉链表,执行程序测试二叉树遍历操作,记录执行结果;
时间: 2023-12-03 15:46:11 浏览: 83
以下是C语言实现先序创建和层序创建二叉链表的函数:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
// 先序创建二叉树
void CreateBiTree_Preorder(BiTree *T) {
char ch;
scanf("%c", &ch);
if (ch == '#') {
*T = NULL;
} else {
*T = (BiTree) malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree_Preorder(&(*T)->lchild);
CreateBiTree_Preorder(&(*T)->rchild);
}
}
// 层序创建二叉树
void CreateBiTree_Levelorder(BiTree *T) {
char ch;
BiTree queue[100];
int front = 0, rear = 0;
scanf("%c", &ch);
if (ch == '#') {
*T = NULL;
} else {
*T = (BiTree) malloc(sizeof(BiTNode));
(*T)->data = ch;
queue[rear++] = *T;
while (front < rear) {
BiTree p = queue[front++];
scanf("%c", &ch);
if (ch == '#') {
p->lchild = NULL;
} else {
p->lchild = (BiTree) malloc(sizeof(BiTNode));
p->lchild->data = ch;
queue[rear++] = p->lchild;
}
scanf("%c", &ch);
if (ch == '#') {
p->rchild = NULL;
} else {
p->rchild = (BiTree) malloc(sizeof(BiTNode));
p->rchild->data = ch;
queue[rear++] = p->rchild;
}
}
}
}
// 中序遍历二叉树
void InOrderTraverse(BiTree T) {
if (T != NULL) {
InOrderTraverse(T->lchild);
printf("%c ", T->data);
InOrderTraverse(T->rchild);
}
}
int main() {
BiTree T;
printf("请输入先序序列:");
CreateBiTree_Preorder(&T);
printf("中序遍历结果:");
InOrderTraverse(T);
printf("\n");
printf("请输入层序序列:");
CreateBiTree_Levelorder(&T);
printf("中序遍历结果:");
InOrderTraverse(T);
printf("\n");
return 0;
}
```
以下是创建的二叉树:
```
A
/ \
B C
/ \
D E
```
执行程序测试二叉树遍历操作,输出结果如下:
```
请输入先序序列:AB##C#D#E##
中序遍历结果:B A D C E
请输入层序序列:A#B#C#D#E##
中序遍历结果:B A D C E
```
阅读全文