- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.二叉排序树的插入 二叉排序树的结构通常不是一次生成的,而是在查找过程中,在查找不成功时再进行插入; 例:从下面的二叉排序树中删除结点P。 二、平衡二叉树 何谓“平衡二叉树”? 1)LL平衡旋转: 3)LR平衡旋转: 例:请将下面序列构成一棵平衡二叉排序树: ( 13,24,37,90,53) 已知如下所示长度为12的表 (Jan, Feb, Mar, Apr, May, June, July, Aug, Sep, Oct, Nov, Dec) 1)按表中元素顺序依次插入一棵初始为空的二叉排序树,求其在等概率情况下查找成功的ASL; 2)若对表中元素先进行排序构成有序表,求在等概率情况下进行折半查找时查找成功的ASL ; 3)按表中元素顺序构造AVL树,求在等概率情况下查找成功的ASL。 * §9.2 动态查找表 特点:表结构本身需要在查找过程中动态生成。 ADT DynamicSearchTable { 抽象数据类型动态查找表的定义如下: 数据对象D: 数据关系R: 数据元素同属一个集合。 D是具有相同特性的数据元素的集合。 每个数据元素含有类型相同的关键字, 可唯一标识数据元素。 InitDSTable(DT) 基本操作P: DestroyDSTable(DT) SearchDSTable(DT, key); InsertDSTable(DT, e); DeleteDSTable(DT, key); TraverseDSTable(DT, Visit()); }ADT DynamicSearchTable 1)从查找性能看,最好情况能达 ?(logn),此时要求表有序; 2)从插入和删除的性能看,最好 情况能达?(1),此时要求存储 结构是链表。 分析可得如下结论: 一、二叉排序树 (二叉查找树) 1.定义 2.查找算法 3.插入算法 4.删除算法 5.查找性能的分析 (1)若它的左子树不空,则左子树上 所有结点的值均小于根结点的值; 1.定义: 二叉排序树(Binary Sort Tree) 或者是一棵空树;或者是具有如下特性的二叉树: (3)它的左、右子树也都分别是二叉 排序树。 (2)若它的右子树不空,则右子树上 所有结点的值均大于根结点的值; 50 30 80 20 90 10 85 40 35 25 23 88 例如: 是二叉排序树。 66 不 86 通常,取二叉链表作为 二叉排序树的存储结构 typedef struct BiTNode { // 结点结构 TElemType data; struct BiTNode *lchild, *rchild; // 左右孩子指针 } BiTNode, *BiTree; 2.二叉排序树的查找算法: 1)若给定值等于根结点的关键字,则查找成功; 2)若给定值小于根结点的关键字,则继续在左子树上进行查找; 3)若给定值大于根结点的关键字,则继续在右子树上进行查找。 否则 若二叉排序树为空,则查找不成功; 50 30 80 20 90 85 40 35 88 32 例如: 二叉排序树 查找关键字 == 50 , 50 50 35 , 50 30 40 35 50 90 , 50 80 90 95 , BiTree SearchBST (BiTree T, KeyType kval) { } // SearchBST if (!T) else if (T-data.key== kval ) else if (T-data.keykval ) else return NULL; // 查找不成功 return T; // 查找成功 return SearchBST (T-lchild, kval); // 在左子树中继续查找 return SearchBST (T-rchild, kval); // 在右子树中继续查找 若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。 例:设查找的关键字序列为{45,24,53,45,12,24,90}, 求生 成的二叉排序树。 思考:如何将一个无序序列构造成一个有序序列? (1)被删除的结点是叶子; (2)被删除的结点只有左子树或者只有
文档评论(0)