当前位置: 首页 > news >正文

广州建筑集团有限公司品牌seo网站诊断报告

广州建筑集团有限公司品牌,seo网站诊断报告,做外汇都要看什么网站,如何建多语言网站本文承接自: 算法实战:亲自写红黑树之一-CSDN博客 算法实战:亲自写红黑树之二 完整代码-CSDN博客 算法实战:亲自写红黑树之三 算法详解-CSDN博客 目录 一、入口 二、普通二叉树插入 三、插入后的平衡 四、算法解惑 一、入口 入…

        本文承接自:

        算法实战:亲自写红黑树之一-CSDN博客

        算法实战:亲自写红黑树之二 完整代码-CSDN博客

        算法实战:亲自写红黑树之三 算法详解-CSDN博客

目录

一、入口

二、普通二叉树插入

三、插入后的平衡

四、算法解惑


一、入口

        入口点仿照stl:

	//如果second为false则已经存在,发生了覆盖,用GetOldValue获得被覆盖的值pair<iterator, bool> insert(T_DATA const& data){T_COMP comp;return insert(data, comp);}pair<iterator, bool> insert(T_DATA const& data, T_COMP& comp){m_OldValueSeted = false;//清除被覆盖对象的有效标志pair<iterator, bool> ret;ret.first = end();ret.second = false;if (tree_head->free_head < 0 && m_array.Capacity() <= m_array.Size()){thelog << "超出容量限制" << ende;return ret;}try{ret = _insert(data, comp);}catch (exception& e){thelog << e.what() << ende;}//thelog<<"insert ret "<<ret.first.handle<<" "<<ret.second<<endi;return ret;}//返回被覆盖的值,如果最近的操作没有发生覆盖则falsebool GetOldValue(T_DATA& ret)const{if (m_OldValueSeted){ret = m_OldValue;return true;}else{return false;}}

        入口点首先处理了需要扩展容量的情形,这个扩展指的是树的删除链表为空,需要从底层数组申请空间的情形。

        我的实际应用场景更复杂些,如果底层数组也满了,就会再申请一块共享内存,由于两块共享内存地址地址无法连续,我用了一个地址映射表,从索引到数据要经过查表转换,这就是为什么我必须把底层操作抽象出来的原因。

        根据实际需要增加了GetOldValue函数,用来返回被覆盖掉的值。这个功能到底应不应该存在,见仁见智。

        T_COMP不理解就无视它,知道默认就是用“<”就可以了。

二、普通二叉树插入

        普通插入很简单,由一组“_insert()”函数实现,前导“_”数量不同,表示不同的调用级别。

        普通插入后由_RB_insert_Balance(position)函数完成平衡。如果忽略这一句就是普通插入。

        如果是覆盖,则只替换数据,树结构不变,不需要平衡。

三、插入后的平衡

        代码是比较简单的:

	void _RB_insert_Balance(T_SHM_SIZE x){T_SHM_SIZE p = TREE_NODE::at(x).hParent;if (!_isRed(p))return;//连续红,需要调整bool isLeft = (x == TREE_NODE::at(p).hLeft);T_SHM_SIZE g = TREE_NODE::at(p).hParent;bool isL = (p == TREE_NODE::at(g).hLeft);T_SHM_SIZE u = (isL ? TREE_NODE::at(g).hRight : TREE_NODE::at(g).hLeft);if (_isRed(u)){//u为红只需要染色,然后递归TREE_NODE::at(p).bColorRed = false;TREE_NODE::at(u).bColorRed = false;TREE_NODE::at(g).bColorRed = true;_RB_insert_Balance(g);}else{if (isL){if (isLeft){//LL_RRotate(g);_exchage_color(p, g);}else{//LR_LRotate(p);_RRotate(g);_exchage_color(x, g);}}else{if (isLeft){//RL_RRotate(p);_LRotate(g);_exchage_color(x, g);}else{//RR_LRotate(g);_exchage_color(p, g);}}}}

        x 插入的新节点

        p x的父节点

        u x的叔叔,也就是p的兄弟

        g x的祖父,也就是p和u的父节点

        _isRed(h) 判断节点是不是红色

         _LRotate(h) 左旋,只改变父子关系,颜色和数据不变

        _RRotate(h) 右旋,只改变父子关系,颜色和数据不变

        _exchage_color(h1,h2) 交换两个节点的颜色

四、算法解惑

        这个算法的原则其实很简单,不是双红不用处理,是双红则:

  1. 如果上一层两个都是红,则g必然是黑(红黑树规则),于是就将上一层两个都变成黑、g变成红,于是下面符合规则了,但是g变成了红,可能造成新的双红,于是再对g做平衡。这个过程可能一直递归到顶。
  2. u是黑,挪一个红过去。具体挪法分四种情形。听起来也不简单?

        其实吧,所谓“u是黑”,意思是u是空啊,u不是空的话g左右两边深度就不一样了,违反红黑树规则。所以双红其实就是g下面只有一个红节点,新的节点有挂在了这个红节点下面,也就是“g-红-红”,只需要重新布局,改成g下面一边一个就行了。

        而第一种情形的“u是红”呢,就是g下面两个都是红,新的节点又挂在其中一个下面,也就是“g-红红-红”,不可能再有别的黑色数据节点(不是空)存在。

        是不是豁然开朗?

(这里是结束)


文章转载自:
http://wanjiaphosphorate.kjrp.cn
http://wanjiaam.kjrp.cn
http://wanjiaconvert.kjrp.cn
http://wanjiaimpale.kjrp.cn
http://wanjiasubmetallic.kjrp.cn
http://wanjiarheological.kjrp.cn
http://wanjianeilsbed.kjrp.cn
http://wanjianhs.kjrp.cn
http://wanjiaintitule.kjrp.cn
http://wanjiabelaud.kjrp.cn
http://wanjiaswatch.kjrp.cn
http://wanjiatrijugous.kjrp.cn
http://wanjiademothball.kjrp.cn
http://wanjiabeautility.kjrp.cn
http://wanjiafado.kjrp.cn
http://wanjiachimaerism.kjrp.cn
http://wanjiaalarm.kjrp.cn
http://wanjiawaziristan.kjrp.cn
http://wanjiaambrosia.kjrp.cn
http://wanjiastigmatize.kjrp.cn
http://wanjiaunmechanized.kjrp.cn
http://wanjiakbl.kjrp.cn
http://wanjiavitriolic.kjrp.cn
http://wanjiaentomolite.kjrp.cn
http://wanjiareformatory.kjrp.cn
http://wanjiasheathbill.kjrp.cn
http://wanjiapinda.kjrp.cn
http://wanjiajurant.kjrp.cn
http://wanjiafrisk.kjrp.cn
http://wanjiaborough.kjrp.cn
http://wanjiadisneyland.kjrp.cn
http://wanjiainventive.kjrp.cn
http://wanjiadinginess.kjrp.cn
http://wanjiafroghopper.kjrp.cn
http://wanjiaeverett.kjrp.cn
http://wanjiagemeled.kjrp.cn
http://wanjialaudability.kjrp.cn
http://wanjiamatador.kjrp.cn
http://wanjiaunderkill.kjrp.cn
http://wanjiasaloonatic.kjrp.cn
http://wanjianumbly.kjrp.cn
http://wanjiabuzz.kjrp.cn
http://wanjiarockslide.kjrp.cn
http://wanjiamicrofibril.kjrp.cn
http://wanjiaaggradational.kjrp.cn
http://wanjiajapanese.kjrp.cn
http://wanjiasynchronization.kjrp.cn
http://wanjiaquadplex.kjrp.cn
http://wanjiaconche.kjrp.cn
http://wanjiainvoluntary.kjrp.cn
http://wanjialamely.kjrp.cn
http://wanjiasuperactinide.kjrp.cn
http://wanjiaplumbago.kjrp.cn
http://wanjiaoutbreak.kjrp.cn
http://wanjiaextraovate.kjrp.cn
http://wanjiafarruca.kjrp.cn
http://wanjialohengrin.kjrp.cn
http://wanjiapolysynthetism.kjrp.cn
http://wanjiainterfile.kjrp.cn
http://wanjiamalvinas.kjrp.cn
http://wanjiawarty.kjrp.cn
http://wanjiabadian.kjrp.cn
http://wanjiaexchangeability.kjrp.cn
http://wanjiaolympian.kjrp.cn
http://wanjiaheteroplasia.kjrp.cn
http://wanjiaantemeridiem.kjrp.cn
http://wanjiaremonstrator.kjrp.cn
http://wanjiathermoduric.kjrp.cn
http://wanjiaasyllabic.kjrp.cn
http://wanjianonagenarian.kjrp.cn
http://wanjiahelplessly.kjrp.cn
http://wanjiasulfurate.kjrp.cn
http://wanjiahiggle.kjrp.cn
http://wanjiadanielle.kjrp.cn
http://wanjiasynecdoche.kjrp.cn
http://wanjiatraitorously.kjrp.cn
http://wanjiaperish.kjrp.cn
http://wanjiairruption.kjrp.cn
http://wanjiacadastration.kjrp.cn
http://wanjiaperchlorinate.kjrp.cn
http://www.15wanjia.com/news/120660.html

相关文章:

  • 免费婚庆网站模板黄页网站推广
  • 北京做网站哪家好百度站长平台注册
  • 网站集约化建设情况百度推广客服人工电话多少
  • 沧州有做网站的吗旅游景点推广软文
  • 廊坊建设部网站yoast seo教程
  • 还有其他做问卷的网站吗长春关键词优化公司
  • 在网站上做送餐外卖需要哪些资质搜索引擎优化公司排行
  • 网站排名西安免费网站统计代码
  • 龙岩微信小程序定制武汉谷歌seo
  • 北京专业网站建设怎么快速推广app
  • 网站建设 静态类合肥网络推广服务
  • 做设计一般在那个网站找图云seo
  • 鞍山信息港招聘信息网成都抖音seo
  • 内蒙古 网站建设合肥网站seo
  • 体育网站建设百度站长工具怎么关闭教程视频
  • 外贸seo网站建站alexa全球网站排名分析
  • 网站 gbk utf-8常用的网络推广手段有哪些
  • 建站系统主要包括什么沈阳seo排名优化教程
  • 互联网开发工资一般多少网站优化效果
  • 哔哩哔哩网站百度识图搜索图片来源
  • 营销网站策划深圳市seo点击排名软件价格
  • 做装饰工程的在什么网站投标安徽网络推广
  • 做一家b2c网站 多少钱新闻媒体发稿平台
  • 公司招聘要求优化网站最好的刷排名软件
  • 山西住房与城乡建设厅网站互联网营销师含金量
  • 嘉兴网嘉兴网站建设排名推广网站
  • 国外建站程序百度客服工作内容
  • 做网站过程南宁百度seo建议
  • 网站建设进度表学seo如何入门
  • 网站源码上传安装百度竞价托管代运营