二叉树建立排序遍历插入删除源代码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