红黑树的实现原理和应用场景_红黑树用来解决什么问题

红黑树的实现原理和应用场景_红黑树用来解决什么问题红黑树有什么优缺点?前言R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。1.常用的二叉树类型1)平衡二叉树平衡二叉树又称 AVL

红黑树有什么优缺点?   前言   R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。   1.常用的二叉树类型   1)平衡二叉树   平衡二叉树又称 AVL 树   特点:一个根节点的左右个子树的高度差不超过1
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   2)非平衡二叉树
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   高度差已经大于1 了。平衡树解决的问题就是 能够最大限度的增加访问的每个节点的的平均性。保证每个节点被访问的次数平衡。   3)完全二叉树   除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   堆排序 结构其实就是一个完全二叉树的结构,倒序和正序就是用的 大根堆 小根堆的原理。   4)满二叉树   每个节点是叶节点或者度为2.
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   5)查找二叉树   这种树的特点是每个根节点大于左子树上的任意一个节点,小于等于右子树上的任意一个节点。
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   举个简单例子:   比如说 我现在要查找 4 这个数字 ,首先 我先比较 根节点就行,如果比根节点小的话,那么肯定在左边的子树列表里面。那么右边的就不用看了。然后依次同理比较。查找二叉树 能够提高查询速度的效率。   但是还有一种情况 比较特殊:
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   这样的 比较尴尬了,一边倒的情况它也满足查找二叉树的概念。但是效率就不那么高效了。   在说原理之前说一下 高度与深度区别:深度定义是从上往下的高度定义是从下往上的空数高度0叶子结点高度1
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   目前很多网上说法不一致 ,大概如上图两种情况 这紫色,橙色代表层数,一般情况 根节点 根节点 是从0 或者 1。   此时树的深度为 3 高度 为 9–4–2–1 =4 针对一颗树来说   但是针对每一个树上的节点而言   相关视频推荐   5种红黑树的用途,从应用到内核场景的优缺点   90分钟了解4种红黑树的Linux内核应用场景   2023年最新技术图谱,c++后端的8个技术维度,助力你快速成为大牛   免费学习地址:C/C++Linux服务器开发/后台架构师   需要C/C++ Linux服务器架构师学习资料加qun(资料包括C/C++,Linux,golang技术,内核,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg,大厂面试题 等)
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   2.红黑树原理   满足一个树是红黑树条件:每个节点要么是红色,要么是黑色。根节点必须是黑色红色节点不能连续(红色节点的孩子和父亲都不能都是红色)从任意节点出发,到其所有叶子节点的简单路径上都包含相同数目的黑色节点.(非常重要)每个红色节点的两个子节点一定都是黑色(叶子节点包含NULL)   红黑树的结构   
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   红黑树从根节点到每个叶子节点的路径都包含相同数量的黑色节点,因此从根节点到叶子节点的路径中包含的黑色节点数被称为树的“黑色高度(black-height)   一颗树黑色高度为3得红黑树,从根结点到叶结点的最短路径长度是3(黑-黑-黑),最长路径为4(黑-红-黑-红-黑)。由于第4条性质,不可能在最长路径中加入更多的黑色结点,因为性质3规定红色结点的子结点必须是黑色的,因此在同一简单路径中不允许有两个连续的红色结点。   红黑树中最长路径就是一条红黑交替的路径,对于给定的黑色高度为n的红黑树,从根结点到叶结点的简单路径的最短长度为n-1,最大长度为2(n-1)。所有对树的操作必须保持上面列出的属性。特别要指出的是,插入和删除树的结点的操作必须遵循这些原则。   红黑树插入过程中情况   每次插入素的时候会将 素 着色为红色。其目的为了快的满足红黑树的4个条件   红黑树结构不会旋转变化情况:   1)当插入的节点为的父亲为黑色节点。【什么都不用做】   2)被插入的节点是根节点。【直接把此节点涂为黑色】   红黑树结构发生旋转变化情况:   1) 当前节点的父节点【60】是红色,且当前节点的祖父节点【40】的另一个子节点(叔叔节点)也是红色。   2)当前插入的父节点是红色,当前叔叔节点的黑色,且当前节点为其父亲节点的左孩子。(进行左旋)   3)当前插入的父节点是红色,当前叔叔节点的黑色,且当前节点为其父亲节点的右孩子。(进行右旋)   
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   红黑树结构发生旋转变化情况已经对应的措施如下
红黑树的实现原理和应用场景_红黑树用来解决什么问题
红黑树的实现原理和应用场景_红黑树用来解决什么问题   3.为什么红黑树效率比较高   红黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。   红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:   1. 每一个结点要么是红色,要么是黑色。   2. 根结点是黑色的。   3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何关键字信息,所有查询关键字都在非终结点上。   4. 每个红色结点的两个子节点必须是黑色的。换句话说:从每个叶子到根的所有路径上不能有两个连续的红色结点   5. 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点   红黑树相关定理   1. 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。   根据上面的性质5我们知道上图的红黑树每条路径上都是3个黑结点。因此最短路径长度为2(没有红结点的路径)。再根据性质4(两个红结点不能相连)和性质1,2(叶子和根必须是黑结点)。那么我们可以得出:一条具有3个黑结点的路径上最多只能有2个红结点(红黑间隔存在)。也就是说黑深度为2(根结点也是黑色)的红黑树最长路径为4,最短路径为2。从这一点我们可以看出红黑树是 大致平衡的。(当然比平衡二叉树要差一些,AVL的平衡因子最多为1) 2. 红黑树的树高(h)不大于两倍的红黑树的黑深度(bd),即h<=2bd   根据定理1,我们不难说明这一点。bd是红黑树的最短路径长度。而可能的最长路径长度(树高的最大值)就是红黑相间的路径,等于2bd。因此h<=2bd。 3. 一棵拥有n个内部结点(不包括叶子结点)的红黑树的树高h<=2log(n+1)   下面我们首先证明一颗有n个内部结点的红黑树满足n>=2^bd-1。这可以用数学归纳法证明,施归纳于树高h。当h=0时,这相当于是一个叶结点,黑高度bd为0,而内部结点数量n为0,此时0>=2^0-1成立。假设树高h<=t时,n>=2^bd-1成立,我们记一颗树高 为t+1的红黑树的根结点的左子树的内部结点数量为nl,右子树的内部结点数量为nr,记这两颗子树的黑高度为bd’(注意这两颗子树的黑高度必然一 样),显然这两颗子树的树高<=t,于是有nl>=2^bd’-1以及nr>=2^bd’-1,将这两个不等式相加有nl+nr>=2^(bd’+1)-2,将该不等式左右加1,得到n>=2^(bd’+1)-1,很显然bd’+1>=bd,于是前面的不等式可以 变为n>=2^bd-1,这样就证明了一颗有n个内部结点的红黑树满足n>=2^bd-1。   在根据定理2,h<=2bd。即n>=2^(h/2)-1,那么h<=2log(n+1)   从这里我们能够看出,红黑树的查找长度最多不超过2log(n+1),因此其查找时间复杂度也是O(log N)级别的。   红黑树的操作   因为每一个红黑树也是一个特化的二叉查找树,因此红黑树上的查找操作与普通二叉查找树上的查找操作相同。然而,在红黑树上进行插入操作和删除操作会导致不 再符合红黑树的性质。恢复红黑树的属性需要少量(O(log n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次)。虽然插入和删除很复杂,但操作时间仍可以保持为 O(log n) 次 。   红黑树的优势   红黑树能够以O(log2(N))的时间复杂度进行搜索、插入、删除操作。此外,任何不平衡都会在3次旋转之内解决。这一点是AVL所不具备的。   而且实际应用中,很多语言都实现了红黑树的数据结构。比如 TreeMap, TreeSet(Java )、 STL(C++)等。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/46866.html

(0)
上一篇 2024年 9月 4日 下午10:56
下一篇 2024年 9月 4日 下午11:04

相关推荐

关注微信