2)初始化一个数据元素为字符串类型的二叉树,并对其实现创建及先序、中序、后序三种遍历。示例:给定二叉树ABDF###E##C##ABCDEF返回它的先序遍历、中序遍历、后序遍历序列,如下图所示。实现思路及步骤(注意:使用变量不要忘记添加变量的声明):A、类型定义二叉链表存储结构;p127B、基本操作1)创建一棵二叉树voidCreatBiTree(BiTree*T);p1311、提取用户输入值x;
时间: 2023-12-10 21:38:54 浏览: 81
A、首先我们需要定义二叉链表存储结构,代码如下:
```c
typedef struct BiNode{
char data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
```
B、创建一棵二叉树,代码如下:
```c
void CreatBiTree(BiTree *T){
char ch;
scanf("%c", &ch);
if(ch == '#'){
*T = NULL;
}else{
*T = (BiTree)malloc(sizeof(BiNode));
(*T)->data = ch;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild)));
}
}
```
C、实现先序遍历,代码如下:
```c
void PreOrder(BiTree T){
if(T){
printf("%c ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
```
D、实现中序遍历,代码如下:
```c
void InOrder(BiTree T){
if(T){
InOrder(T->lchild);
printf("%c ", T->data);
InOrder(T->rchild);
}
}
```
E、实现后序遍历,代码如下:
```c
void PostOrder(BiTree T){
if(T){
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ", T->data);
}
}
```
F、完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct BiNode{
char data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
void CreatBiTree(BiTree *T){
char ch;
scanf("%c", &ch);
if(ch == '#'){
*T = NULL;
}else{
*T = (BiTree)malloc(sizeof(BiNode));
(*T)->data = ch;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild)));
}
}
void PreOrder(BiTree T){
if(T){
printf("%c ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T){
if(T){
InOrder(T->lchild);
printf("%c ", T->data);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T){
if(T){
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ", T->data);
}
}
int main(){
BiTree T;
printf("请输入二叉树的序列:");
CreatBiTree(&T);
printf("先序遍历结果为:");
PreOrder(T);
printf("\n中序遍历结果为:");
InOrder(T);
printf("\n后序遍历结果为:");
PostOrder(T);
return 0;
}
```
阅读全文