数据结构实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档