如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
《数据结构》课程设计实验报告题目二叉树与二叉排序树的建立及其应用学院商学院专业信息系统与信息管理班级信息101学号201052275115学生姓名徐鸽同组成员王超男何艳李梦雪关冬张卫芳韦露莎指导教师刘小晶编写日期2012年6月27日问题描述:在此次课程设计中实现二叉树的建立,建立二叉树以后对该二叉树进行先根遍历、中根遍历、后根遍历操作。然后再应用这些遍历操作来实现二叉树的查找操作,并且根据两种遍历操作来判断两棵树是否相等。根据二叉排序树的结构特征建立二叉排序树。并且在已有二叉排序树的基础上,根据二叉排序树的特点,对其进行查找操作、插入操作、删除操作。问题分析:问题为:编程实现根据二叉树的先序遍历序列和中序遍历序列来建立两颗二叉树,并判断这两颗二叉树是否相等。在整个课程设计中,我主要是负责二叉树相关应用内容里的建立两颗二叉树的工作。首先取先跟遍历序列中的第一个字符作为根结点的数据域值建立根结点;在中根遍历序列中查找确定这个根结点在中根遍历序列中的位置,由此得到在根结点左边的序列即为此根结点左子树的中根遍历序列,而右边的序列即为此根结点右子树的中根遍历序列。根据左、右子树的中根遍历序列中的字符个数再在先序遍历序列中确定左、右子树的先序遍历序列。根据(2)(3)确定的左、右子树的先根和中根遍历序列采用递归调用的方法建立根结点的左、右子树。要实现上述建立的二叉树的步骤,需要引入5个参数:preOrder,inOrder,preIndex,inIndex和count。其中:参数preOrder是整棵树的先跟遍历序列;inPrder是整棵树的中根遍历序列;preIndex是先跟遍历序列在preOrder中的开始位置:inIdex是中根遍历序列在inOrder中的开始位置;count表示树种结点的个数。数据结构描述:二叉链式存储结构PublicclassBiTree{PrivateBiTreeNoderoot;//树的根结点PublicBiTree(){//构造一棵空树This.root=null;}PublicBiTree(BiTreeNoderoot){//构造一棵树This.root=root;}算法设计:1.算法流程图:2.具体算法:(每人负责不同部分)PublicBiTree(Stringpreorder,StringinOrder,intpreIndex,intinIndex,intcount){If(count>0){//先根和中根非空Charr=preorder.charAt(preIndex);//取先根字符串中的第一个元素作为根节点intI=0;for(;i<count;i++)//寻找根结点在中根遍历字符串中的索引if(r==inOrder.charAt(i+inIndex))break;root=newBiTreeNode(r);//建立树的根结点root.setLchild(newBiTree(preorder,inOrder,preIndex+1.index,i).root);//建立树的左子树root.setRchild(newBiTree(preorder,inOrder,preIndex+i+1,inIndex+i+1,count-i-1).root);//建立树的右子树}}遍历publicclassBiTree{privateBiTreeNode1root;publicBiTree(){this.root=null;}publicBiTree(BiTreeNode1root){this.root=root;}privatestaticintindex=0;publicBiTree(StringpreStr){charc=preStr.charAt(index++);if(c!='#'){root=newBiTreeNode1(c);root.setLchild(newBiTree(preStr).root);root.setRchild(newBiTree(preStr).root);}elseroot=null;}publicvoidpreRootTraverse(BiTreeNode1T){if(T!=null){System.out.print(T.getData());preRootTraverse(T.getLchild());preRootTraverse(T.getRchild());}}publicvoidinRootTraverse(BiTreeNode1T){if(T!=null){inRootTraverse(T.getLch