二叉查找树  (Binary Search Tree)

查找最好时间复杂度O(logN),最坏时间复杂度O(N)。

插入删除操作算法简单,时间复杂度与查找差不多

平衡二叉查找树 ( Balanced Binary Search Tree ) 

查找的时间复杂度维持在O(logN),不会出现最差情况

AVL树在执行每个插入操作时最多需要1次旋转,其时间复杂度在O(logN)左右。

AVL树在执行删除时代价稍大,执行每个删除操作的时间复杂度需要O(2logN)。

红黑树(Red-Black Tree)

查找 效率最好情况下时间复杂度为O(logN),但在最坏情况下比AVL要差一些,但也远远好于BST。

插入和删除操作改变树的平衡性的概率要远远小于AVL(RBT不是高度平衡的)。因此需要的旋转操作的可能性要小,而且一旦需要旋转,插入一个结点最多只需要旋转2次,删除最多只需要旋转3次(小于AVL的删除操作所需要的旋转次数)。虽然变色操作的时间复杂度在O(logN),但是实际上,这种操作由于简单所需要的代价很小。

红黑树的几个特性:

(1) 每个节点或者是黑色,或者是红色。
(2) 根节点是黑色。
(3) 每个叶子节点是黑色。 [注意:这里叶子节点,是指子节点为空的节点!]
(4) 如果一个节点是红色的,则它的子节点必须是黑色的。
(5) 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

ref: http://hxraid.iteye.com/blog/614070

转载于:https://www.cnblogs.com/awiki/p/7352792.html

树——常用的数据结构相关推荐

  1. 【算法】常用的数据结构与算法

    学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...

  2. 【算法基础】常用的数据结构与算法

    学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...

  3. 【算法入门】动态图展示 6 个常用的数据结构,一目了然!

    数据结构的确很枯燥,尤其是初学时候,不知道到底有啥用.不过随着编码年限的增长,我们越会发现它真的很有用,巧妙的数据结构是算法高效实现的助推剂. 今天的文章不会用文字和静态图展现常用的数据结构,因为这种 ...

  4. 常用的数据结构_动态图展示 6 个常用的数据结构,一目了然

    数据结构的确很枯燥,尤其是初学时候,不知道到底有啥用.不过随着编码年限的增长,我们越会发现它真的很有用,巧妙的数据结构是算法高效实现的助推剂. 今天的文章不会用文字和静态图展现常用的数据结构,因为这种 ...

  5. Python3实现常用的数据结构

    Python3实现常用的数据结构 之前学习Python的时候当做练习的代码.实现了栈.队列.树.图等的常用数据结构,并给出了一些常用算法,比如BFS.DFS.最短路等. Github链接:https: ...

  6. 游戏制作中的大宝剑---常用的数据结构与算法

    前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为了方便大家阅读,个人认为 ...

  7. 一篇关于 JS 常用的数据结构与算法万字总结

    一.前言 首先,为什么我会学习数据结构与算法呢,其实主要是有两方面 第一,是我在今年的flag里明确说到我会学这个东西 第二,学了这些,对自己以后在工作或者面试也会带来许多好处 然后,本文是最近学习的 ...

  8. 游戏开发中常用的数据结构和算法

    转载Loving_初衷 前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为 ...

  9. 数据结构专题—计算机中常用的数据结构

    前言: 在学习 java 相关技术或者学习mysql 存储引擎 InnoDB 的时候,会发现其底层运用了大量的数据结构.之所以不从java这门语言来展开讲数据结构是因为:数据结构是不分语言不分平台的. ...

最新文章

  1. JSON字符串key缺少双引号的解决方法
  2. Apache HttpClient库的日志级别设置原理
  3. sigar如何获取linux的buffer内存,Linux 下使用Sigar 获取内存信息
  4. vue 分享微信传参_vue实现微信分享链接添加动态参数的方法
  5. CI中写原生SQL(封装查询)
  6. 常用文本编辑器 editor 的常用插件 —— CopyEdit
  7. 【PYTHON笔记】文件读写,定位
  8. BISS绝对值编码器_TI方案_线路延迟补偿
  9. 大数据技术原理与应用-林子雨课后(部分习题答案)
  10. MATLAB的WFDB软件下载及使用
  11. c语言如何将十六进制转化为二进制数,C语言--将十进制整数转化为二进制与十六进制输出...
  12. 做项目管理需要哪些技能呢?
  13. Linux进程和轻量级进程(LWP)
  14. qq屏蔽怎么知道对方信息(qq屏蔽怎么让对方知道)
  15. 快速拿下CKA认证考试,这些要求和tips你得知道
  16. 什么是 DDoS?完整指南
  17. 【操作系统实验】各种幺蛾子
  18. 按键手机怎么装java_怎样把USB键盘接到Android手机上
  19. 计算机二级Java-综合应用题-(极速倍斩第2版-B1)
  20. 一位架构师用服务打动客户的故事之二

热门文章

  1. spark sql 查看分区_Spark 3.0 中七个必须知道的 SQL 性能优化
  2. php+php-fom+nginx配置参数调优详解
  3. 准备Java面试?mysql用户远程访问授权
  4. 使用java实现面向对象编程试题答案,面试题+笔记+项目实战
  5. 【迁移学习(Transfer L)全面指南】Domain-Adversarial Training:基于对抗的迁移学习方法
  6. 【深度学习】U-Net 网络分割多分类医学图像解析
  7. 机器学习(MACHINE LEARNING)多属性决策模型
  8. python【数据结构与算法】 python3 deque模块(双端队列)
  9. python【蓝桥杯vip练习题库】ADV-297快速排序
  10. 常见OJ评判结果对照表