欢迎来到天天文库
浏览记录
ID:50798904
大小:186.19 KB
页数:26页
时间:2020-03-14
《二叉树中结点左右子树的交换.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、问题描述二叉树是一种常见的特殊的树型结构,在计算机领域有着极为广泛的应用。在二叉树的一些应用中,常常要求在树中查找具有某些特征的结点或者对树中全部结点逐一进行某种处理,这就提出了遍历二叉树。根据遍历的方向的不同,有前序遍历、中序遍历、后序遍历以及层序遍历。在本次课程设计中,要求学生通过编写程序完成对二叉树的一些操作,比如可以构造二叉树、打印二叉树、遍历二叉树以及对左右子树进行交换等等。二、基本要求要求:。构造一颗20个节点的完全二叉树或者20个节点以上的满二叉树。实现如下步骤:(1)实现二叉树的构造过程,并打印出二叉树(2)对该二叉树分别用层序、前序、中序和后序四种不同的方法进
2、行遍历;(3)将该二叉树的所有左右子树进行交换,得到新的二叉树,并打印出该二叉树;(4)对新获得的二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历。三、数据结构的设计由数据结构中二叉树的定义可知,二叉树的结点由一个数据元素和分别指向其左、右子树的两个分支构成,所以在本程序二叉树的构造是采用二叉链表的链式存储结构,链表中的结点应包含三个域:数据域和左、右孩子的指针域。这种存储结构可以方便二叉树的建立以及遍历。1、结点的数据结构structnode{chardata;structnode*lchild,*rchild;}2、基本操作voidCreate(BiTNode**p)初
3、始条件:按照结点的结构体构造二叉树;操作结果:构造一棵二叉树。voidPreOrderTraverse(BiTreeT)初始条件:二叉树T存在;操作结果:按照前序遍历方法遍历二叉树。voidInOrderTraverse(BiTreeT)初始条件:二叉树T存在;操作结果:按照中序遍历方法遍历二叉树。voidPostOrderTraverse(BiTreeT)初始条件:二叉树T存在;操作结果:按照后序遍历方法遍历二叉树。voidLevelOrderTraverse(BiTreeT)初始条件:二叉树T存在;操作结果:按照层序遍历方法遍历二叉树。voidSwapChild(BiTNode
4、**p)初始条件:二叉树存在且交换的结点有子树;操作结果:将二叉树左右结点交换。voidPaint(BiTreeT)初始条件:二叉树T存在;操作结果:将二叉树的结点打印出来。四、软件模块结构图左右子树交换主函数构造二叉树菜单函数打印二叉树遍历函数层序遍历前序遍历后序遍历中序遍历五、程序设计思想1、程序设计基本思想(1)本实验要求编写一个程序实现对二叉树的各种基本操作,并以此为目的设计一个程序,完成如下功能:1、输入二叉树的先序序列字符,建立二叉链表。注意:输入时,必须加入虚结点以示空指针的位置;假设虚结点输入时用空格字符表示。2、打印二叉树。3、按先序、中序、后序和层序三种不同方法
5、遍历二叉树。4、交换二叉树的所有左右子树。5、打印二叉树,并且分别按照先序、中序、后序和层序三种不同方法遍历二叉树。6、在设计一个简单的菜单,分别调试上述算法。7、编写主程序完成各功能的调用和实现。(2)测试数据:1、按照先序序列依次输入字符。2、打印二叉树并且按先序、中序和后序遍历二叉树并输出遍历结果。3、输出交换二叉树的左右子树并且打印二叉树并且按先序、中序和后序遍历二叉树并输出遍历结果。2、程序设计基本思想本程序含有7个函数;①主函数main()②前序遍历二叉树PreOrderTraverse(T,PrintChar)③中序遍历二叉树Inorder(T)④后续遍历二叉树Pos
6、torder(T)⑤层序遍历二叉树LevelOrderTraverse(T)⑥打印二叉树Paint(T)⑦交换二叉树所有左右子树SwapChild(T)六、程序流程图1、创建函数开始输入结点输入为*YN空结点新结点二叉树构成结束voidCreate(BiTNode**p){chare;e=getchar();if(e=='*')(*p)=NULL;else{if(!((*p)=(BiTree)malloc(sizeof(BiTNode)))){printf("分配失败");exit(0);}(*p)->data=e;Create(&((*p)->lchild));Create(
7、&((*p)->rchild));}}2、前序遍历函数开始结点BTNode是否为空YN输出根节点前序遍历左子树前序遍历右子树遍历完成结束voidPreOrderTraverse(BiTreeT){if(T){printf("%c",T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}}3、中序遍历函数开始结点BTNode是否为空YN中序遍历左子树输出根节点中序遍历右子树遍历完成结束void
此文档下载收益归作者所有