数据结构 二叉树遍历实验报告

上传人:简****9 文档编号:114624276 上传时间:2019-11-12 格式:DOC 页数:21 大小:480.05KB
返回 下载 相关 举报
数据结构 二叉树遍历实验报告_第1页
第1页 / 共21页
数据结构 二叉树遍历实验报告_第2页
第2页 / 共21页
数据结构 二叉树遍历实验报告_第3页
第3页 / 共21页
数据结构 二叉树遍历实验报告_第4页
第4页 / 共21页
数据结构 二叉树遍历实验报告_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《数据结构 二叉树遍历实验报告》由会员分享,可在线阅读,更多相关《数据结构 二叉树遍历实验报告(21页珍藏版)》请在金锄头文库上搜索。

1、数据结构之二叉树实 验 报 告 题目:二叉树的遍历和子树交换 指导老师:杨政宇 班级:通信1202 姓名:徐江 学号:0909121127需求分析1. 演示程序分别用多种遍历算法遍历二叉树并把数据输出。2. 输入字符序列,递归方式建立二叉树。3.在演示过程序中,用户敲击键盘,输入数据,即可看到数据的输出。4.实现链式存储的二叉树的多种遍历算法。遍历算法包括:a) 中序递归遍历算法、前序递归遍历算法【选】b) 中序遍历非递归算法c) 先序或后序遍历非递归算法d) 建立中序线索,并进行中序遍历和反中序遍历5.实现二叉树的按层遍历算法6.设计一个测试用的二叉树并创建对应的内存二叉树,能够测试自己算法

2、的边界(包括树节点数为0、1以及1 的不同情形)。7.测试数据:输入数据:-+a *b -c d -e f 概要设计说明:本程序在递归调用中用到了链表,在非递归调用时用到了栈。1. 栈的抽象数据类型ADT Stack数据对象:D=ai|aichar,i=1,2,3.数据关系:R=| ai -1,ai D,i=2,3.基本操作:InitStack(&S) 操作结果:构造一个空栈StackEmpty( S ) 初始条件:栈S已存在。 操作结果:若S为空栈,则返回OK,否则返回ERROR。 Push( &S, e ) 初始条件:栈S已存在。 操作结果:插入元素e为新的栈顶元素。 Pop( &S, &

3、e ) 初始条件:栈S已存在且非空。 操作结果:删除S的栈顶元素,并用e返回其值。 GetTop( S, &e ) 初始条件:栈S已存在且非空。 操作结果:用e返回S的栈顶元素。 2.二叉树的抽象数据类型ADT BinaryTree 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R: 若D=,则R=,称BinaryTree为空二叉树; 若D,则R=H,H是如下二元关系; (1)在D中存在惟一的称为根的数据元素root,它在关系H下无前驱; (2)若D-root,则存在D-root=D1,Dr,且D1Dr =; (3)若D1,则D1中存在惟一的元素x1,H,且存在D1上的 关系H1 H

4、;若Dr,则Dr中存在惟一的元素xr,H,且 存在上的关系Hr H;H=,H1,Hr; (4)(D1,H1)是一棵符合本定义的二叉树,称为根的左子树;(Dr,Hr)是一 棵符合本定义的二叉树,称为根的右子树。 基本操作: CreateBiTree( &T) 初始条件:给出二叉树T的定义。 操作结果:按要求构造二叉树T。 PreOrderTraverse_re( T, print() ) 初始条件:二叉树T存在,print是二叉树全部结点输出的应用函数。 操作结果:先序递归遍历T,对每个结点调用函数print一次且仅一次。一旦 print()失败,则操作失败。 InOrderTraverse(

5、T, print() ) 初始条件:二叉树T存在,print是二叉树全部结点输出的应用函数。 操作结果:中序非递归遍历T,对每个结点调用函数print一次且仅一次。一 旦printf()失败,则操作失败。 InOrderTraverse_re(T,print() ) 初始条件:二叉树T在在,print是二叉树全部结点输出的应用函数。操作结果:中序递归遍历T,对每个结点调用函数print一次且仅一次。一旦 printf()失败,则操作失败。 PreOrderTraverse(T,print() 初始条件:二叉树T存在,print是二叉树全部结点输出的应用函数。 操作结果:先序非递归遍历T,对每个

6、结点调用函数print一次且仅一次。一 旦print()失败,则操作失败。 Levelorder(T) 初始条件:二叉树T在在。操作结果:分层遍历二叉树T,并输出。InOrderThreading(Thrt,T);初始条件:二叉树T在在。操作结果:中序遍历二叉树,并将其中序线索化。InOrderTraverse_Thr( T, print);初始条件:二叉树T在在。操作结果:中序非递归遍历二叉线索树TInThreading(p);初始条件:结点p在在。操作结果:结点p及子树线索化。3.主程序的流程:void main()初始化;提示;执行二叉数ADT函数;4.本程序包含三个模块1) 主程序模块

7、void main()初始化;接受命令;显示结果;2) 链表模块。递归调用时实现链表抽象数据类型。3) 栈模块。非递归调用时实现栈的抽象数据类型。详细设计1.宏定义及全局变量#define TElemType char#define SElemType BiTree#define OK 1#define OVERFLOW 0#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10SqStack S;BiThrTree pre;BiThrTree i;2.函数定义int CreateBiTree(BiTree &T);

8、/创建二叉树void PreOrderTraverse_re(BiTree T,void (*print)(TElemType e);/先序递归遍历二叉树void InOrderTraverse(BiTree T,int (*print)(TElemType e);/中序非递归遍历二叉树void InOrderTraverse_re(BiTree T,int (*print)(TElemType e) ;/中序递归遍历二叉树void PreOrderTraverse(BiTree T,int (*print)(TElemType e);/先序非递归遍历二叉树int print(TElemTyp

9、e e);/打印元素void InitStack(SqStack &S);/栈的初始化void Pop(SqStack &S,SElemType &e);void Push(SqStack &S,SElemType &e);int StackEmpty(SqStack S);int GetTop(SqStack S,SElemType &e);void Levelorder(BiTree T) ;void InOrderThreading(BiThrTree &Thrt,BiThrTree T);int InOrderTraverse_Thr(BiThrTree T, int (*print)

10、(TElemType e);void InThreading(BiThrTree p);3.二叉树链表数据结构:typedef struct BiTNodeTElemType data;struct BiTNode *lchild ,*rchild;PointerTag LTag , RTag;BiTNode , *BiTree , BiThrNode , *BiThrTree; 基本操作:a)构造二叉树Tint CreateBiTree(BiTree &T)char ch;scanf(%c,&ch);if(ch= )T=NULL;elseif(!(T=(BiTNode *)malloc(si

11、zeof(BiTNode)return ERROR;T-data=ch;if (CreateBiTree(T-lchild) T-LTag=Link;if (CreateBiTree(T-rchild) T-RTag=Link;return OK;b)先序递归遍历二叉数T,并输出全部结点值。void PreOrderTraverse_re(BiTree T,int (*print)(TElemType e)if(T)if(print(T-data) PreOrderTraverse_re(T-lchild,print);PreOrderTraverse_re(T-rchild,print);r

12、eturn ;elsereturn ;c)中序非递归遍历二叉树T,并输出全部结点值void InOrderTraverse(BiTree T,int (*print)(TElemType e)SqStack S;S.base=NULL;S.top=NULL;SElemType p=NULL;InitStack(S);Push(S,T);while(!StackEmpty(S)while(GetTop(S,p)&p)Push(S,p-lchild);Pop(S,p);if(!StackEmpty(S)Pop(S,p);print(p-data);Push(S,p-rchild);return;d

13、)中序递归遍历二叉树T,并输出全部结点值void InOrderTraverse_re(BiTree T,int (*print)(TElemType e) if(T) InOrderTraverse_re(T-lchild,print); print(T-data); InOrderTraverse_re(T-rchild,print); e)中序遍历二叉树T,并将其中序线索化,Thrt指向头结点 void InOrderThreading(BiThrTree &Thrt,BiThrTree T)Thrt=(BiThrTree)malloc(sizeof(BiThrNode);Thrt-LTag=Link;/建头结点Thrt-RTag=Thread;Thrt-rchild=Thrt;/右指针回指if(!T)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号