二叉排序树与平衡二叉树的实现课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
攀枝花学院本科学生课程设计任务书
注:任务书由指导教师填写。
摘要及关键字
本程序中的数据采用“树形结构”作为其数据结构。具体采用的是“二叉排序树”。
二叉排序树(又称二叉查找树):(1)若左子树不空,则左子树上所有节点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有节点均大于它的根结点的值;(3)它的左右子树分别为二叉排序树。
二叉平衡树:若不是空树,则(1)左右子树都是平衡二叉树;(2)左右子树的深度之差的绝对值不超过1。
本次实验是利用二叉排序树和平衡二叉树达到以下目的:(1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)计算二叉排序树T查找成功的平均查找长度,输出结果;
(4)输入元素x,查找二叉排序树T,若存在含x的结点,则删该结点,并作中序遍历(执行操作2);否则输出信息“无x”;(5)用数列L,生成平衡的二叉排序树BT:当插入新元素之后,发现当前的二叉排序树BT不是平衡的二叉排序树,则立即将它转换成新的平衡的二叉排序树BT; (6)计算平衡的二叉排序树BT的平均查找长度,输出结果。
关键字:数列L,结点,二叉排序树,平衡二叉树
目录
摘要 (3)
1 绪论 (5)
1.1 课程设计的目的 (5)
1.2 相关知识的阐述 (5)
1.2.1一位数组的存储结构 (5)
1.2.2建立二叉排序树 (5)
1.2.3中序遍历二叉树 (5)
1.2.4平均查找长度 (6)
1.2.5平均二叉树(AVL树) (6)
1.2.6平衡因子 (7)
1.2.7平衡二叉树的调整方法 (7)
2方案设计 (8)
2.1 模块功能 (8)
3 算法设计 (8)
3.1 算法流程图 (8)
4详细设计 (10)
4.1 主程序 (10)
4.2 定义二叉树结构 (11)
4.3 建立二叉树 (11)
4.3.1二叉排序树的查找 (11)
4.3.2二叉排序树的插入 (11)
4.4 中序遍历 (12)
4.5 平均查找长度 (12)
4.6 删除节点 (12)
4.7 判断平衡二叉树 (13)
5 调试分析 (14)
5.1 时间复杂度的分析 (14)
5.2 运行结果 (14)
5.3 结果分析 (15)
6 课程设计总结 (16)
参考文献 (17)
1 绪论
1.1 课程设计的目的
(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
(2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。
(3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设
计的基本能力。
1.2 相关知识的阐述
1.2.1 一维数组的存储结构
建立二插排序树,首先用一个一维数组记录下读入的数据,然后再用边查找边插入的方式将数据一一对应放在完全二叉树相应的位置,为空的树结点用“0”补齐。
1.2.2 建立二叉排序树
二叉排序树是一种动态树表。其特点是:树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的节点时再进行
插入。新插入的结点一定是一个新添加的叶子节点,并且是查找不成功时
查找路径上访问的最后一个结点的左孩子或右孩子结点。
插入算法:
首先执行查找算法,找出被插结点的父亲结点;
判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点
插入;
若二叉树为空,则首先单独生成根结点。
注意:新插入的结点总是叶子结点。
1.2.3 中序遍历二叉树
中序遍历二叉树算法的框架是:
若二叉树为空,则空操作;
否则(1)中序遍历左子树(L);
(2)访问根结点(V);
(3)中序遍历右子树(R)。
中序遍历二叉树也采用递归函数的方式,先访问左子树2i,然后访问根结点i,最后访问右子树2i+1.先向左走到底再层层返回,直至所有的结点都被访问完毕。
1.2.4 平均查找长度
计算二叉排序树的平均查找长度时,采用类似中序遍历的递归方式,用s记录总查找长度,j记录每个结点的查找长度,s置初值为0,采用累加的方式最终得到总查找长度s。平均查找长度就等于s/i(i为树中结点的总个数)。
假设在含有n(n>=1)个关键字的序列中,i个关键字小于第一个关键字,
n-i-1个关键字大于第一个关键字,则由此构造而得的二叉排序树在n个记录的查找概率相等的情况下,其平均查找长度为:
ASL(n,i)=[1+i*(P(i)+1)+(n-i-1)(P(n-i-1)+1)]/n 其中P(i)为含有i个结点的二叉排序树的平均查找长度,则P(i)+1为查找左子树中每个关键字时所用比较次数的平均值,P(n-i-1)+1为查找右子树中每个关键字时所用比较次数的平均值。又假设表中n个关键字的排列是“随机”的,即任一个关键字在序列中将是第1个,或第2个,…,或第n个的概率相同,则可对上式从i等于0至n-1取平均值。最终会推导出:
当n>=2时,ASL(n)<=2(1+1/n)ln(n)
由此可见,在随机的情况下,二叉排序树的平均查找长度和log(n)是等数量级的。
另外,含有n个结点的二叉排序树其判定树不是惟一的。对于含有同样一组结点的表,由于结点插入的先后次序不同,所构成的二叉排序树的形态和深度也可能不同。
而在二叉排序树上进行查找时的平均查找长度和二叉树的形态有关:
①在最坏情况下,二叉排序树是通过把一个有序表的n个结点依次插入而生
成的,此时所得的二叉排序树蜕化为棵深度为n的单支树,它的平均查找长度和
单链表上的顺序查找相同,亦是(n+1)/2。
②在最好情况下,二叉排序树在生成的过程中,树的形态比较匀称,最终得
到的是一棵形态与二分查找的判定树相似的二叉排序树,此时它的平均查找长度
大约是lgn。
③插入、删除和查找算法的时间复杂度均为O(lgn)。
1.2.5 平衡二叉树( AVL树 )
①平衡二叉树(Balanced Binary Tree)是指树中任一结点的左右子树的高
度大致相同。
②任一结点的左右子树的高度均相同(如满二叉树),则二叉树是完全
平衡的。通常,只要二叉树的高度为O(1gn),就可看作是平衡的。