红黑树深入剖析及Java实现综述.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
红黑树深入剖析及Java实现 在理想的情况下,二叉查找树增删查改的时间复杂度为O(logN)(其中N为节点数),最坏的情况下为O(N)。当它的高度为logN+1时,我们就说二叉查找树是平衡的。 作者:振兴来源: HYPERLINK /redblack-tree.html \t _blank 振兴|2016-12-08 11:01  HYPERLINK javascript:favorBox(open); \o 一键收藏,随时查看,分享好友! \t _self ?收藏  HYPERLINK javascript:; ??分享 ? 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。它的高度决定了它的查找效率。 在理想的情况下,二叉查找树增删查改的时间复杂度为O(logN)(其中N为节点数),最坏的情况下为O(N)。当它的高度为logN+1时,我们就说二叉查找树是平衡的。 BST的查找操作 T??key?=?a?search?key? Node?root?=?point?to?the?root?of?a?BST? ? while(true){? ????if(root==null){? ????????break;? ????}? ????if(root.value.equals(key)){? ????????return?root;? ????}? ????else?if(pareTo(root.value)0){? ????????root?=?root.left;? ????}? ????else{? ????????root?=?root.right;? ????}? }? return?null;? 从程序中可以看出,当BST查找的时候,先与当前节点进行比较: 如果相等的话就返回当前节点; 如果少于当前节点则继续查找当前节点的左节点; 如果大于当前节点则继续查找当前节点的右节点。 直到当前节点指针为空或者查找到对应的节点,程序查找结束。 BST的插入操作 Node?node?=?create?a?new?node?with?specify?value? Node?root?=?point?the?root?node?of?a?BST? Node?parent?=?null;? ? //find?the?parent?node?to?append?the?new?node? while(true){? ???if(root==null)break;? ???parent?=?root;? ???if(pareTo(root.value)=0){? ??????root?=?root.left;??? ???}else{? ??????root?=?root.right;? ???}?? }? if(parent!=null){? ???if(pareTo(parent.value)=0){//append?to?left? ??????parent.left?=?node;? ???}else{//append?to?right? ??????parent.right?=?node;? ???}? }? 插入操作先通过循环查找到待插入的节点的父节点,和查找父节点的逻辑一样,都是比大小,小的往左,大的往右。找到父节点后,对比父节点,小的就插入到父节点的左节点,大就插入到父节点的右节点上。 BST的删除操作 删除操作的步骤如下: 查找到要删除的节点。 如果待删除的节点是叶子节点,则直接删除。 如果待删除的节点不是叶子节点,则先找到待删除节点的中序遍历的后继节点,用该后继节点的值替换待删除的节点的值,然后删除后继节点。 BST存在的问题 BST存在的主要问题是,数在插入的时候会导致树倾斜,不同的插入顺序会导致树的高度不一样,而树的高度直接的影响了树的查找效率。理想的高度是logN,最坏的情况是所有的节点都在一条斜线上,这样的树的高度为N。 RBTree 基于BST存在的问题,一种新的树——平衡二叉查找树(Balanced BST)产生了。平衡树在插入和删除的时候,会通过旋转操作将高度保持在logN。其中两款具有代表性的平衡树分别为AVL树和红黑树。AVL树由于实现比较复杂,而且插入和删除性能差,在实际环境下的应用不如红黑树。 红黑树(Red-Black Tree,以下简称RBTree)的实际应用非常广泛,比如Linux内核中的完全公平调度器、高精度计时器、ext3文件系统等等,各种语言的函数库如Java的TreeMap和TreeSe

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档