实现二叉树中所有节点左右子树的交换

上传人:桔**** 文档编号:548372547 上传时间:2023-09-16 格式:DOC 页数:30 大小:709KB
返回 下载 相关 举报
实现二叉树中所有节点左右子树的交换_第1页
第1页 / 共30页
实现二叉树中所有节点左右子树的交换_第2页
第2页 / 共30页
实现二叉树中所有节点左右子树的交换_第3页
第3页 / 共30页
实现二叉树中所有节点左右子树的交换_第4页
第4页 / 共30页
实现二叉树中所有节点左右子树的交换_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《实现二叉树中所有节点左右子树的交换》由会员分享,可在线阅读,更多相关《实现二叉树中所有节点左右子树的交换(30页珍藏版)》请在金锄头文库上搜索。

1、数据结构课程设计实验报告题目名称: 实现二叉树中所有节点左右子树的交换 学 院: 信息科学与工程学院 专业班级: 计算机科学与技术 1003 班 姓 名: 叶 成 功 学 号: 12081414 指导教师: 陈国良教授 李立三教授 日 期: 2012年7月3日 目录一、问题描述4二、基本要求4三、数据结构的设计41、结点的数据结构42、基本操作4四、软件模块结构图5五、程序设计思想61、程序设计基本思想62、程序设计基本思想6六、程序流程图71、创建函数72、前序遍历函数83、中序遍历函数94、后序遍历函数105、层序遍历函数116、左右子树交换函数137、二叉树打印函数148、遍历调用函数1

2、49、菜单函数1610、主函数16七、源程序代码18八、调试分析25九、数据测试261、主菜单界面272、建立一棵有二十个结点的完全二叉树283、打印二叉树284、遍历二叉树285、二叉树左右子树交换286、交换后打印二叉树297、交换后二叉树的遍历298、退出程序29十、用户使用手册29十一、心得体会29一、问题描述二叉树是一种常见的特殊的树型结构,在计算机领域有着极为广泛的应用。在二叉树的一些应用中,常常要求在树中查找具有某些特征的结点或者对树中全部结点逐一进行某种处理,这就提出了遍历二叉树。根据遍历的方向的不同,有前序遍历、中序遍历、后序遍历以及层序遍历。在本次课程设计中,要求学生通过编

3、写程序完成对二叉树的一些操作,比如可以构造二叉树、打印二叉树、遍历二叉树以及对左右子树进行交换等等。二、基本要求要求:。构造一颗20个节点的完全二叉树或者20个节点以上的满二叉树。实现如下步骤:(1)实现二叉树的构造过程,并打印出二叉树(2)对该二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历;(3)将该二叉树的所有左右子树进行交换,得到新的二叉树,并打印出该二叉树;(4)对新获得的二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历。三、数据结构的设计 由数据结构中二叉树的定义可知,二叉树的结点由一个数据元素和分别指向其左、右子树的两个分支构成,所以在本程序二叉树的构造是采用二叉

4、链表的链式存储结构,链表中的结点应包含三个域:数据域和左、右孩子的指针域。这种存储结构可以方便二叉树的建立以及遍历。1、结点的数据结构struct node char data; struct node *lchild,*rchild;2、基本操作void Create(BiTNode *p)初始条件:按照结点的结构体构造二叉树;操作结果:构造一棵二叉树。void PreOrderTraverse(BiTree T)初始条件:二叉树T存在;操作结果: 按照前序遍历方法遍历二叉树。void InOrderTraverse(BiTree T)初始条件:二叉树T存在;操作结果:按照中序遍历方法遍历二

5、叉树。void PostOrderTraverse(BiTree T)初始条件:二叉树T存在;操作结果:按照后序遍历方法遍历二叉树。void LevelOrderTraverse(BiTree T)初始条件:二叉树T存在;操作结果:按照层序遍历方法遍历二叉树。void SwapChild(BiTNode *p)初始条件:二叉树存在且交换的结点有子树;操作结果:将二叉树左右结点交换。void Paint(BiTree T)初始条件:二叉树T存在;操作结果:将二叉树的结点打印出来。 四、软件模块结构图左右子树交换主函数 构造二叉树 菜单函数打印二叉树遍历函数层序遍历前序遍历后序遍历中序遍历五、 程

6、序设计思想1、程序设计基本思想 (1)本实验要求编写一个程序实现对二叉树的各种基本操作,并以此为目的设计一个程序,完成如下功能: 1、输入二叉树的先序序列字符,建立二叉链表。注意:输入时,必须加入虚结点以示空指针的位置;假设虚结点输入时用空格字符表示。 2、打印二叉树。 3、按先序、中序、后序和层序三种不同方法遍历二叉树。 4、交换二叉树的所有左右子树。 5、打印二叉树,并且分别按照先序、中序、后序和层序三种不同方法遍历二叉树。 6、在设计一个简单的菜单,分别调试上述算法。 7、编写主程序完成各功能的调用和实现。 (2)测试数据: 1、按照先序序列依次输入字符。 2、打印二叉树并且按先序、中序

7、和后序遍历二叉树并输出遍历结果。 3、输出交换二叉树的左右子树并且打印二叉树并且按先序、中序和后序遍历二叉树并输出遍历结果。2、程序设计基本思想本程序含有7个函数; 主函数main( ) 前序遍历二叉树PreOrderTraverse(T,PrintChar) 中序遍历二叉树Inorder(T) 后续遍历二叉树Postorder(T) 层序遍历二叉树LevelOrderTraverse(T) 打印二叉树Paint(T) 交换二叉树所有左右子树SwapChild(T) 六、程序流程图 1、创建函数开始 输入结点输入为* 空结点新结点 二叉树构成结束void Create(BiTNode *p)

8、char e; e=getchar(); if(e=*) (*p)=NULL; else if(!(*p)=(BiTree)malloc(sizeof(BiTNode) printf(分配失败n); exit(0); (*p)-data=e; Create(&(*p)-lchild); Create(&(*p)-rchild); 2、前序遍历函数开始结点BTNode是否为空输出根节点前序遍历左子树前序遍历右子树遍历完成结束void PreOrderTraverse(BiTree T) if(T) printf(%c ,T-data); PreOrderTraverse(T-lchild); P

9、reOrderTraverse(T-rchild); 3、中序遍历函数开始结点BTNode是否为空中序遍历左子树输出根节点中序遍历右子树遍历完成结束void InOrderTraverse(BiTree T) if(T) InOrderTraverse(T-lchild); printf(%c ,T-data); InOrderTraverse(T-rchild); 4、后序遍历函数开始结点BTNode是否为空后序遍历左子树后序遍历右子树输出结点遍历完成结束void PostOrderTraverse(BiTree T) if(T) PostOrderTraverse(T-lchild); P

10、ostOrderTraverse(T-rchild); printf(%c ,T-data); 5、层序遍历函数P=root访问节点P,并将P入队P=P-LChildP为空?N队为空?出队P,P=P-RChild结束YNYvoid LevelOrderTraverse(BiTree T) BiTree QMaxLength; int front=0,rear=0; BiTree p; /根结点入队 if(T) Qrear=T; rear=(rear+1)%MaxLength;/插入结点为新的队尾元素 while(front!=rear) /队头元素出队 p=Qfront; front=(front+1)%MaxLength;/删除头结点 printf(%c ,p-data); /左孩子不为空,入队 if(p-lchild) Qrear=p-lchild;rear=(rear+1)%MaxLength;/插入左孩子结点为新的队尾元素 /右孩子不为空,入队 if(p-rchild) Qrear=p-rchild;rear=(rear+1)%MaxLength;/插入右孩子结点为新的队尾元素 6、左右子树交换函数开始结点BTNod

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

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