数据结构实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告
第次实验
学号: 20141060106 姓名:叶佳伟
一、实验目的
1、复习二叉树的逻辑结构、存储结构及基本操作;
2、掌握二叉链表及二叉树的创建、遍历;
3、了解二叉树的应用。
二、实验内容
1、(必做题)假设二叉树中数据元素类型是字符型,请采用二叉链表实现二叉树的以下基本操作:
(1)根据二叉树的先序序列和中序序列构造二叉树;
(2)根据先序遍历二叉树;
(3)根据中序遍历二叉树;
(4)根据后序遍历二叉树。
测试数据包括如下错误数据:
先序:1234;中序:12345
先序:1234;中序:1245
先序:1234;中序:4231
2、(必做题)对于一棵二叉树,请实现:
(1)计算二叉树的叶子数目;
(2)计算二叉树的深度。
三、算法描述
(采用自然语言描述)
1、先构造一个二叉树的结构体,再构造createtree的函数实现数据的输入。在键盘上输入先序和中序序列。先判断先序和后序序列是否符合逻辑。若符合逻辑,则在先序、中序、后序函数将二叉树输出。
四、详细设计
(画出程序流程图)
五、程序代码
(给出必要注释)
#define max 5
#define TEL 2*max+1
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef char TElemType;
typedef struct BiTNode{
TElemType data; //数据域
struct BiTNode *lchild, *rchild; //左右孩子指针域
} BiTNode, *BiTree;
BiTNode root;
BiTree rt=&root;
int calculate(char c,char s[],int st)
{char *p;
p=s+st;
while(*p!=c && *p!='\0') p++;
return p-s;
}
void createtree(BiTree *t,int i1,int i2,int len,char preorder[],char pinorder[]) {int r,llen,rlen;
if(len<=0) *t=NULL;
else
{*t=(BiTree)malloc(sizeof(BiTNode));
(*t)->data=preorder[i1];
r=calculate(preorder[i1],pinorder,i2);
llen=r-i2;
rlen=len-(llen+1);
createtree(&(*t)->lchild,i1+1,i2,llen,preorder,pinorder);
createtree(&(*t)->rchild,i1+llen+1,r+1,rlen,preorder,pinorder);
}
}
void PostOrderTraverse(BiTree t)
{if(t)
{PostOrderTraverse(t->lchild);
PostOrderTraverse(t->rchild);
putchar(t->data);
}
}
void PreOrderTraverse(BiTree t)
{if(t)
{putchar(t->data);
PreOrderTraverse(t->lchild);
PreOrderTraverse(t->rchild);
}
}
void InOrderTraverse(BiTree t)
{if(t)
{
InOrderTraverse(t->lchild);
putchar(t->data);
InOrderTraverse(t->rchild);
}
}
main()
{ char preorder[max],pinorder[max];
printf("请输入二叉树的先序:");
gets(preorder);
printf("请输入二叉树的中序:");
gets(pinorder);
if(strlen(pinorder)!=strlen(preorder))
printf("对不起!输入的数据有问题\n");
else {createtree(&rt,0,0,max,preorder,pinorder);
printf("先序遍历二叉树为:");
PreOrderTraverse(rt);
printf("\n");
printf("中序遍历二叉树为:");
InOrderTraverse(rt);
printf("\n");
printf("后序遍历二叉树为:");
PostOrderTraverse(rt);
printf("\n");}
}
2. #include
#include
#define MaxSize 50