




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
二叉排序树(Binary Sort Tree)又称二叉查找树,亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;一、查找:步骤:若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。若子树为空,查找不成功。平均情况分析(在成功查找两种的情况下):在一般情况下,设 P(n,i)且它的左子树的结点个数为 i 时的平均查找长度。如图的结点个数为 n = 6 且 i = 3; 则 P(n,i)= P(6, 3) = 1+ ( P(3) + 1) * 3 + ( P(2) + 1) * 2 / 6= 1+ ( 5/3 + 1) * 3 + ( 3/2 + 1) * 2 / 6注意:这里 P(3)、P(2) 是具有 3 个结点、2 个结点的二叉分类树的平均查找长度。 在一般情况,P(i)为具有 i 个结点二叉分类树的平均查找长度。P(3) = (1+2+2)/ 3 = 5/3P(2) = (1+2)/ 2 = 3/2 P(n,i)= 1+ ( P(i) + 1) * i + ( P(n-i-1) + 1) * (n-i-1) / n P(n)= P(n,i)/ n lchild=t-rchild=NULL; t-data=key; return; if(keydata ) InsertBST(t-lchild,key); elseInsertBST (t-rchild, key ); /n个数据在数组d中,tree为二叉排序树根 void CreateBiTree(tree,d ,n) tree=NULL; for(i=0;in;i+) InsertBST(tree,di); 最小值二叉树c例程:#include struct priorityqueue int capacity; int size; struct priorityqueue *elements; *tryit; struct priorityqueue *initialize ( int maxelements ) struct priorityqueue *h; h = malloc ( sizeof ( struct priorityqueue ) ); h - elements = malloc ( sizeof ( int ) * ( maxelements + 1 ) ); h - capacity = maxelements; h - size = 0; h - elements0 = -23767; return h; void insert ( int x , struct priorityqueue *h ) int i; for ( i = +h - size ; h - elements i / 2 x ; i /= 2 ) h - elements i = h - elements i / 2 ; h - elements i = x; int deletemin ( struct priorityqueue *h ) int i , child ; int minelement , lastelement; minelement = h - elements 1 ; lastelement = h - elements h - size- ; for ( i = 1 ; i * 2 size ; i = child ) child = i * 2; if ( child != h - size & h - elements child + 1 elements child ) child+; if ( lastelement h - elements child ) h - elements i = h - elements child ; elsebreak; h - elements i = lastelement; return minelement; main() tryit = initialize ( 10 ); insert ( 4 , tryit ); insert ( 5 , tryit ); insert ( 10 , tryit ); insert ( 3 , tryit ); printf ( %dn , deletemin ( tryit ) ); printf ( %dn , deletemin ( tryit ) ); printf ( %dn , deletemin ( tryit ) ); printf ( %dn , deletemin ( tryit ) ); getch(); 四、删除结点在二叉排序树删去一个结点,分三种情况讨论:1. 若*p结点为叶子结点,即PL(左子树)和PR(右子树)均为空树。由于删去叶子结点不破坏整棵树的结构,则只需修改其双亲结点的指针即可。2. 若*p结点只有左子树PL或右子树PR,此时只要令PL或PR直接成为其双亲结点*f的左子树(当*p是左子树)或右子树(当*p是右子树)即可,作此修改也不破坏二叉排序树的特性。3. 若*p结点的左子树和右子树均不空。在删去*p之后,为保持其它元素之间的相对位置不变,可按中序遍历保持有序进行调整,可以有两种做法:其一是令*p的左子树为*f的左/右(依*p是*f的左子树还是右子树而定)子树,*s为*p左子树的最右下的结点,而*p的右子树为*s的右子树;其二是令*p的直接前驱(或直接后继)替代*p,然后再从二叉排序树中删去它的直接前驱(或直接后继)即让*f的左子树(如果有的话)成为*p左子树的最左下结点(如果有的话),再让*f成为*p的左右结点的父结点。在二叉排序树上删除一个结点的算法如下:#define Status bool Status Delete(BiTree*); /必须先申明 Status DeleteBST(BiTree &T, KeyType key) /若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素,并返回 /TRUE;否则返回FALSE if(!T) return false; /不存在关键字等于key的数据元素 else if(key = T-data.key) / 找到关键字等于key的数据元素 return Delete(T); else if(key data.key) return DeleteBST(T-lchild, key); elsereturn DeleteBST(T-rchild, key); return ture; Status Delete(BiTree &p) /从二叉排序树中删除结点p,并重接它的左或右子树 if(!p-rchild) /右子树空则只需重接它的左子树 q=p; p=p-lchild; delete q; else if(!p-lchild) /左子树空只需重接它的右子树 q=p; p=p-rchild; delete q; else /左右子树均不空 q=p; s=p-lchild; while(s-rchild) q=s; s=s-rchild; /转左,然后向右到尽头 p-data = s-data; /s指向被删结点的“前驱” if(q!=p) q-rchild = s-lchild; /重接*q的右子树 elseq-lchild = s-lchild;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 书法天地二教学设计-2023-2024学年初中书法练习指导八年级上册川教版
- 2025租赁合同偏向甲方
- 2025合同范本(办公设备)
- 2025年北京市存量房屋买卖合同(自助成交版)
- 2.4 向量的坐标表示说课稿-2025-2026学年中职基础课-拓展模块一 上册-高教版(2021)-(数学)-51
- 1.1 数列的概念(1) 教学设计-2024-2025学年高二上学期数学湘教版(2019)选择性必修第一册
- 橡胶厂文件管理规范制度
- 湖南省益阳市资阳区九年级化学下册 第九单元 课题2 溶解度说课稿 新人教版
- 宁波事业单位笔试真题2025
- 2025先进纳米材料研发合同
- 2025贵州毕节威宁自治县面向社会招聘城市社区工作者17人考试参考试题及答案解析
- 婴儿奶粉合同(标准版)
- 先心病介入封堵治疗
- JJG 860-2015压力传感器(静态)
- GB/T 22231-2008颗粒物粒度分布/纤维长度和直径分布
- GB/T 18253-2000钢及钢产品检验文件的类型
- GB 5009.3-2016食品安全国家标准食品中水分的测定
- 液化气站安全生产目标考核与奖惩记录
- 高中生励志奋斗与梦想课件
- 《中职地理》配套教学课件
- 最全可自由编辑的中国各省市地图课件
评论
0/150
提交评论