【问题描述】
以二叉链表为存储结构,实现二叉树的创建、遍历
实验要求:在程序中定义下述函数,并实现要求的函数功能:
CreateTree():按从键盘输入的扩展前序序列,创建二叉树
PreOrderTree():前序遍历树(递归)
InOrderTree():中序(非递归)遍历树
LaOrderTree(): 后序遍历树(递归)
【输入形式】
以扩展二叉树的前序遍历序列作为输入,创建二叉树。
【输出形式】
输出前、中、后序遍历结果
【样例输入】
AB#D##C##
【样例输出】
ABDC
BDAC
DBCA
//链表为存储结构,实现二叉树的创建、遍历
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
//二叉树的存储结构;1个数据域,2个指针域
typedef char ElemType;
typedef struct node{
ElemType data;
struct node *lchild;
struct node *rchild;
}BiNode;
typedef BiNode* BiTree;
//创建二叉树
BiTree CreateTree(){
BiTree T;
char x;
scanf("%c",&x);
if(x=='#') return T=NULL;
if(x=='\n') return T;
else{
T=(BiTree)malloc(sizeof(BiNode));
T->data=x;
T->lchild=CreateTree();
T->rchild=CreateTree();
return T;
}
}
//前序遍历 (递归)
void PreOrderTree(BiTree T){
if(T==NULL) return;
printf("%c",T->data);
PreOrderTree(T->lchild);
PreOrderTree(T->rchild);
}
//中序遍历 (非递归)
void InOrderTree(BiTree T){
if(T==NULL) return;
InOrderTree(T->lchild);
printf("%c",T->data);
InOrderTree(T->rchild);
}
//后序遍历 (递归)
void LaOrderTree(BiTree T){
if(T==NULL) return;
LaOrderTree(T->lchild);
LaOrderTree(T->rchild);
printf("%c",T->data);
}
int main(){
BiTree T;
T=CreateTree(); //建立
PreOrderTree(T); //前序遍历输出
printf("\n");
InOrderTree(T); //中序遍历输出
printf("\n");
LaOrderTree(T); //后序遍历输出
return 0;
}
该程序以二叉链表为存储结构,根据输入的扩展前序序列创建二叉树,并实现了前序、中序和后序的非递归遍历。通过`CreateTree()`函数构建树,然后分别调用`PreOrderTree()`、`InOrderTree()`和`LaOrderTree()`进行遍历输出。样例输入`AB#D##C##`,输出前序、中序和后序遍历结果分别为`ABDC`、`BDAC`和`DBCA`。

被折叠的 条评论
为什么被折叠?



