- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
基于树的查找算法第九章主讲:周翔
二叉排序树(二叉查找树)二叉排序树(BinarySortTree)又称为二叉查找树、二叉搜索树,它或者是一棵空树,或者是具有下列性质的二叉树:(1)如果左子树不为空,则左子树上所有结点的值均小于它根结点的值;(2)如果右子树不为空,则右子树上所有结点的值均大于它根结点的值;(3)左、右子树也分别为二叉排序树;(4)树中没有值相同的结点;
二叉排序树(二叉查找树)图例
二叉排序树(二叉查找树)结构定义dataleftChildrightChild
二叉排序树(二叉查找树)二叉排序树的插入二叉排序树的查找二叉排序树的删除
二叉排序树(二叉查找树)二叉排序树的插入已知一关键字值为key的结点S:若二叉树是空树,则S成为二叉排序树的根;若二叉树非空,则将S.key与二叉排序树根结点的关键字进行比较:if(key的值等于根结点的值),则停止插入;elseif(key的值小于根结点的值),则将S插入左子树;elseif(key的值大于根结点的值),则将S插入右子树。
二叉排序树(二叉查找树)输入数据,反复执行二叉排序树的插入过程输入数据{53,78,65,17,87,09,81,15}535378537865537865175378658717537865091787537865811787095378651517870981
二叉排序树(二叉查找树)新结点作为叶结点插入例如:插入新结点2835154550402510203028时间复杂度为:O(log2n)
二叉排序树(二叉查找树)创建:创建过程实质上就是反复执行插入的过程输入数据{53,78,65,17,87,09,81,15}535378537865537865175378658717537865091787537865811787095378651517870981时间复杂度为:O(nlog2n)
二叉排序树(二叉查找树)n个结点,按不同的输入顺序组成二叉排序树最短的二叉排序树高度是?最长的二叉排序树高度是?log2n(取下整数)+1n
二叉排序树(二叉查找树)二叉排序树的查找根据二叉排序树的特点首先将待查关键字key与根结点关键字t进行比较,如果:key=t:则返回根结点地址;keyt:则进一步查左子树;keyt:则进一步查右子树。
二叉排序树(二叉查找树)351545504025102030搜索28搜索45搜索失败搜索成功图例
二叉排序树(二叉查找树)二叉排序树的查找:平均查找长度(ASL)若查找成功,则是从根结点出发走了一条从根结点到待查结点的路径若查找不成功,则是从根结点出发走了一条从根到某个叶子结点的路径所以,二叉排序树的查找与折半查找过程类似,查找长度与树的高度有关!!!
二叉排序树(二叉查找树)二叉排序树的查找:最坏情况:二叉排序树是把一个有序表的n个结点依次插入生成的,由此得到一棵深度为n的单支树,它的平均查找长度和单链表上的顺序查找相同,是
二叉排序树(二叉查找树)二叉排序树的查找:最好情况:得到的是一棵形态与二分查找的判定树相似的二叉排序树,此时它的平均查找长度大约是
二叉排序树(二叉查找树)与折半查找的比较区别:折半查找对应的判定树是惟一的,而二叉排序树却不是!!!折半查找采用顺序存储结构,作插入、删除时,需移动大量元素;而二叉排序树则不需要。
二叉排序树(二叉查找树)二叉排序树的删除:从二叉排序树中删除一个结点,不能把以该结点为根的子树都删去,只能删掉该结点,并且保证删除后所得的二叉树仍然满足二叉排序树的性质不变。
二叉排序树(二叉查找树)二叉排序树的删除的算法思想:若删除结点不在二叉排序树中,则不做任何操作。否则,假设要删除的结点为p,结点p的双亲结点为f,并假设结点p是结点f的左孩子(右孩子的情况类似),分三种情况讨论:若p为叶结点若p只有左子树(或只有右子树)p既有左子树,又有右子树
二叉排序树(二叉查找树)二叉排序树的删除的算法思想:若p为叶结点:则可直接删除537865091787pf5378651787
二叉排序树(二叉查找树)二叉排序树的删除的算法思想:若p只有左子树(或只有右子树),可将p的左子树(或右子树)直接改为其双亲结点f的左子树只有左子树:只有右子树:537865091787pf5378650987
二叉排序树(二叉查找树)二叉排序树的删除的算法思想:p既有左子树,又有右子树方法1:找到p结点在中序序列中的前驱结点s,将p的左子树改为f的左子树,将p的右子树改为s的右子树:
二叉排序树(二叉查找树)二叉排序树的删除的算法思想:将p的左子树改为f的左子树将p的右子树改为s的右子p173040091215055
您可能关注的文档
- 数据结构——基于Python语言(微课版) 课件 T1_C语言基础.pptx
- 数据结构——基于Python语言(微课版) 课件T1_绪论(什么是数据结构).pptx
- 数据结构——基于Python语言(微课版) 课件T2_线性表(顺序表).pptx
- 数据结构——基于Python语言(微课版) 课件T3_线性表(单链表).pptx
- 数据结构——基于Python语言(微课版) 课件T4_线性表(双向链表和循环链表).pptx
- 数据结构——基于Python语言(微课版) 课件T5_线性表(应用与比较).pptx
- 数据结构——基于Python语言(微课版) 课件T7_栈与队列(队列).pptx
- 数据结构——基于Python语言(微课版) 课件T10_数组与广义表(矩阵).pptx
- 数据结构——基于Python语言(微课版) 课件T11_数组与广义表(广义表).pptx
- 数据结构——基于Python语言(微课版) 课件T12_基于线性表的查找算法.pptx
- 数据结构——基于Python语言(微课版) 课件T19_基于树的排序算法.pptx
- 数据结构——基于Python语言(微课版) 课件T23_计算式查找法.pptx
- 数据结构——基于Python语言(微课版) 课件T22_图(应用).pptx
- 数据结构——基于Python语言(微课版) 课件T21_图(遍历).pptx
- 数据结构——基于Python语言(微课版) 课件T15_树(二叉树).pptx
- 数据结构——基于Python语言(微课版) 课件T20_图(表示法).pptx
- 数据结构——基于Python语言(微课版) 课件T14_树(树).pptx
- 数据结构——基于Python语言(微课版) 课件T9_串(模式匹配).pptx
- 数据结构——基于Python语言(微课版) 课件T6_栈与队列(栈).pptx
- 数据结构——基于Python语言(微课版) 课件 T8_串(串).pptx
原创力文档


文档评论(0)