毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

二叉树建立排序遍历插入删除源代码C语言 第3页

更新时间:2010-7-30:  来源:毕业论文
二叉树建立排序遍历插入删除源代码C语言 第3页
.函数的调用关系图
二叉排序树的存储方法:设计不同的结点结构可构成不同形式的链式存储结构。由二叉排序树的定义得知,二叉排序树的结点由一个数据元素和分别指向其左,右子树的两个分支构成,则表示二叉排序树的链表中的结点至少包含3个域:数据域和左、右指针域。利用这种结点结构所得二叉排序树的存储结构称为二叉链表。
对二叉排序树进行中序遍历的方法(递归):若二叉排序树为空,则为空操作;否则进行如下操作:
1、中序遍历二叉排序树左子树。
2、访问二叉排序树的根结点。
3、中序遍历二叉排序树右子树。
在二叉排序树中查找结点的方法:先将查找关键字的值与根结点的值比较,如果查找值小于根结点值,沿左子树开始查找——可能是根的左子结点的值,或者是左子的子孙结点之一。和根的左子结点值比较,如果小于其值,继续沿左子结点的左子树查找。如果大于则查找左子结点的右子树。
在二叉排序树中插入一个结点的方法:要插入一个结点,必须先找到插入的地方,这很想要找一个不存在的结点的过程。从根开始查找一个相应的结点,它将是新结点的父结点,当父结点找到后,新的结点就可以连接到它的左子结点或是右子结点处,这将取决于新结点的值是比父结点的值大还是小。
在二叉排序树中删除一个结点的方法,需要分为下列三种情况:
1、该结点是叶子结点,没有子结点;
2、该结点有一个子结点;
3、该结点有两个子结点。
情况1:删除没有子结点的结点。要删除叶子结点,只需要改变该结点的父结点的对应的值,由指向该结点改为NULL就可以了。要删除的结点仍然存在,但它已经不是树的一部分了。找到结点后,先要检查它是不是真的没有子结点。如果它没有子结点,还需要检查它是不是根。如果它是根的话,只需要把它置为NULL这样就清空了整棵树。否则:就把父结点的lchild或rchild置为NULL 断开父结点和那个要删除的结点的连接。
情况2:删除有一个子结点的结点。这个结点只有两个连接——连向父结点的和连向它唯一的子结点。需要从这个序列中“剪断”这个结点,把它的子结点直接接到它的父结点上,这个过程要求改变父结点的指向,使父结点指向要删除结点的子结点。
情况3:删除有两个子结点的结点。用它的中序后继来代替该结点。寻找后继结点的算法:首先,程序找到初始结点的右子结点,它的关键字值一定比初始结点要大,然后转到初始结点的右子结点的左子结点那里(如果有的话),然后到这个左子结点的左子结点。以此类推,顺着左子结点的路径一直向下找。这个路径上的最后一个左子结点就是初始结点的后继。 本文来自辣~文*论/文|网

4.调试分析毕业论文http://www.751com.cn
A.调试中遇到的问题及对问题的解决方法
问题一、删除操作错误
 在调试中得到错误信息,删除函数delete(bistree root)中的返回值类型错误,而且相关的函数名不正确。
解决方法:
经检查返回值应与root的类型bistree相同,函数名delete与系统中的函数名有冲突,后改为-delete,并将所有的都更正,才得到正确的结果。
问题二、树的初始化:
 其中包括树的个数、元素等相关信息;可用函数create_btree(int *data, int len)来实现此操作。初次调试没有得到预期的结果。
解决方法:
    检查相关算法是否正确,算法正确;再看主函数中调用正确与否,发现书写错误;改正相关的语句。

B.算法的时间复杂度和空间复杂度
 计算average查找长度,时间复杂度为O(n),n=index.
 创建二叉树的时间复杂度为O(n).
5.测试结果
二叉树的建立,可以先自己输入二叉树的元素个数,以及元素本身,得到的是排序后的二叉树,并可求出树的平均查找长度。
(1)输入元素个数和元素本身:
如:输入元素个数为:5。个元素分别为:54、23、69、46、11。

上一页  [1] [2] [3] 

二叉树建立排序遍历插入删除源代码C语言 第3页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。