什么是红黑树

这篇具有很好参考价值的文章主要介绍了什么是红黑树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

红黑树常见问题

1 stl中的set和set底层用的什么数据结构?

红黑树

2 红黑树的数据结构

1    enum Color  
2.    {  
3.              RED = 0,  
4.              BLACK = 1  
5.    };  
6.      
7.    struct RBTreeNode  
8.    {  
9.               struct RBTreeNode*left, *right, *parent;  
10.               int   key;  
11.               int data;  
12.               Color color;  
13.    };  

3 红黑树有哪些性质?

一般的,红黑树,满足以下性质,即只有满足以下全部性质的树,我们才称之为红黑树:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点。


正是红黑树的这5条性质,使一棵n个结点的红黑树始终保持了logn的高度,从而也就解释了上面所说的“红黑树的查找、插入、删除的时间复杂度最坏为O(log n)”

什么是红黑树

 

 

4.红黑树的各种操作的时间复杂度是多少?

能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)

5.红黑树相比于BST和AVL树有什么优点?

   红黑树是牺牲了严格的高度平衡的优越条件为代价,它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。
当然,还有一些更好的,但实现起来更复杂的数据结构能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。

    相比于BST,因为红黑树可以能确保树的最长路径不大于两倍的最短路径的长度,所以可以看出它的查找效果是有最低保证的。
在最坏的情况下也可以保证O(logN)的,这是要好于二叉查找树的。因为二叉查找树最坏情况可以让查找达到O(N)。
红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高所以在插入和删除中所做的后期维护操作肯定会比红黑树要耗时好多, 但是他们的查找效率都是O(logN),所以红黑树应用还是高于AVL树的. 实际上插入 AVL 树和红黑树的速度取决于你所插入的数据。 如果你的数据分布较好,则比较宜于采用 AVL树(例如随机产生系列数),但是如果你想处理比较杂乱的情况,则红黑树是比较快的。

6.红黑树相对于哈希表,在选择使用的时候有什么依据?

权衡三个因素: 查找速度, 数据量, 内存使用,可扩展性。
    总体来说,hash查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。
并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash。
但若你对内存使用特别严格, 希望程序尽可能少消耗内存,那么一定要小心,hash可能会让你陷入尴尬,特别是当你的hash对象特别多时,
你就更无法控制了,而且 hash的构造速度较慢。

  1. 红黑树是有序的,Hash是无序的,根据需求来选择。
  2. 红黑树占用的内存更小(仅需要为其存在的节点分配内存),而Hash事先应该分配足够的内存存储散列表,即使有些槽可能弃用
  3. 红黑树查找和删除的时间复杂度都是O(logn),Hash查找和删除的时间复杂度都是O(1)。
  4. 当哈希冲突的比较多的时候,一般解决都是拉链法,但是这样就会导致查找的复杂度为o(n),这样就不如用红黑树了

 

7 请你回答一下map底层为什么用红黑树实现

1、红黑树:

红黑树是一种二叉查找树,但在每个节点增加一个存储位表示节点的颜色,可以是红或黑(非红即黑)。

通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,

因此,红黑树是一种弱平衡二叉树,相对于要求严格的AVL树来说,它的旋转次数少,所以对于搜索,插入,删除操作较多的情况下,通常使用红黑树。

性质:

1. 每个节点非红即黑

2. 根节点是黑的;

3. 每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的;

4. 如果一个节点是红色的,则它的子节点必须是黑色的。

5. 对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点;

2、平衡二叉树(AVL树):

红黑树是在AVL树的基础上提出来的。

平衡二叉树又称为AVL树,是一种特殊的二叉排序树。其左右子树都是平衡二叉树,且左右子树高度之差的绝对值不超过1。

AVL树中所有结点为根的树的左右子树高度之差的绝对值不超过1。

将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF,那么平衡二叉树上的所有结点的平衡因子只可能是-1、0和1。只要二叉树上有一个结点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。

3、红黑树较AVL树的优点:

AVL 树是高度平衡的,频繁的插入和删除,会引起频繁的rebalance,导致效率下降;红黑树不是高度平衡的,算是一种折中,插入最多两次旋转,删除最多三次旋转。

所以红黑树在查找,插入删除的性能都是O(logn),且性能稳定,所以STL里面很多结构包括map底层实现都是使用的红黑树。

 

 

推荐链接:

 

https://blog.csdn.net/v_JULY_v/article/details/6105630

https://blog.csdn.net/n1314n/article/details/89889446文章来源地址https://www.toymoban.com/news/detail-711255.html

到了这里,关于什么是红黑树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • HTTP/2 中的常见问题

    HTTP/2 中的常见问题

    为什么要修改 HTTP? HTTP/1.1 在 Web 上已经服务了 15 年以上,但是它的缺点正在开始显现。加载网页比以往任何时候都需要更多资源(请参阅HTTP Archive’s page size statistics),并且要高效地加载所有这些资源非常困难,因为事实上,HTTP 只允许每个 TCP 连接有一个未完成的请求。 过

    2024年02月15日
    浏览(13)
  • Java开发中的常见问题和解决方法:如何解决常见的性能和bug问题

    Java开发中的常见问题和解决方法:如何解决常见的性能和bug问题

      在Java开发中,我们经常会面临各种各样的问题,包括性能问题和Bug。这些问题可能会导致应用程序的运行变慢、不稳定甚至崩溃。本文将介绍一些常见的Java开发问题,并提供解决这些问题的方法和技巧,帮助开发人员更好地处理性能和Bug问题。 性能问题是Java开发中最常见

    2024年02月09日
    浏览(12)
  • 【网络技术】什么是DNS及常见问题

    【网络技术】什么是DNS及常见问题

    域名服务器(Domain Name Server,DNS)是一种用于存储和管理域名解析信息的服务器。它们负责将易于记忆的域名(例如 www.example.com)转换为与之关联的 IP 地址(例如 192.0.2.1),以便在互联网上进行通信。 一句话总结: 域名系统 (DNS) 是互联网的电话簿 DNS(Domain Name System)是

    2024年02月12日
    浏览(50)
  • CodeGeeX使用中的常见问题与解决方法

    CodeGeeX使用中的常见问题与解决方法

    上一篇文章中我们介绍了CodeGeeX插件中的“隐藏”设置,方便用户能够选择符合自己编程习惯的方式,更流畅的使用CodeGeeX。但仍然有一些使用问题,需要我们在产品持续迭代中进行优化,也有些问题是受限于IDE平台默认的交互或解析方式。今天为大家整理的,就是CodeGeeX使用

    2024年02月11日
    浏览(9)
  • Android Studio安装过程中的常见问题

    Android Studio安装过程中的常见问题

    1、关于下载地址的问题 https://developer.android.google.cn/ https://www.androiddevtools.cn/ 2、关于版本的问题 与操作系统位数一致 3、是安装版还是解压版 安装版能自动安装AS软件组件,同时还能配置系统的环境变量。解压版还要自己配置环境变量,比较麻烦。 4、AS的几个重要组件 AS的开

    2024年02月05日
    浏览(12)
  • 「C#」异步编程玩法笔记-WinForm中的常见问题

    「C#」异步编程玩法笔记-WinForm中的常见问题

    目录 1、异步更新界面 1.1、问题 1.2、解决问题 1.3、AsyncOperationManager和AsyncOperation 1.4、Invoke、BeginInvoke、EndInvoke及InvokeRequired Invoke InvokeRequired BeginInvoke EndInvoke 2、死锁 2.1、问题 2.2、 解决方法 2.2.1、不要await 2.2.2、用await代替Wait()/Result 2.2.3、使用新的异步方法中转 2.2.4、Config

    2024年02月01日
    浏览(16)
  • 金浪无线路由器组网中的常见问题

        一、搭建了一个小型IEEE802.11b无线网络由于是分批次购买的,所以,笔记本和无线网卡的型号非常多。正确设置SSID和WEP后,大多数无线客户端接入正常,只有一些老型号的无线网卡无法正确连接至无线网络,而可能是无线网卡与无线AP之间的兼容性不太好所致。Wi-Fi联

    2024年02月05日
    浏览(8)
  • neo4j使用中的常见问题

    neo4j使用中的常见问题

    本文主要记录我自己遇到的一些常见问题 解决方法 :找到你安装neo4j的路径下的conf文件夹,找到 neo4j.conf 将前面的注释#去掉,然后重启neo4j,在重启项目即可。 注意,将上面设置为false以后,即登录时候,不进行验证,使用匿名登录,因此不管用户名密码输入什么,都可以

    2024年02月14日
    浏览(14)
  • JAVA中的this关键词 —— 初学java常见问题

    JAVA中的this关键词 —— 初学java常见问题

    在之前讲解构造方法的时候,我给大家提到过一个this,但之前讲解得并不很细致。所以今天我们再利用一篇文章,专门讲解这个this,我们好好探究一下它到底有哪些细节。 全文大约 【 2400】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有

    2024年02月13日
    浏览(10)
  • Elasticsearch部署中的两大常见问题及其解决方案

    随着大数据和实时搜索的日益普及,Elasticsearch已经成为现代应用中不可或缺的工具。但是,像所有软件一样,部署和配置Elasticsearch可能会遇到一些问题。本文将探讨两个我最近遇到的常见问题及其解决方案。 在启动Elasticsearch时,我遇到了以下错误: failed to resolve host [“l

    2024年02月06日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包