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

红黑树

  • 什么是二叉排序(BST)树?
    二叉树是空树或者满足一下条件:
  1. 若它的左子树不为空,则左子树上的左节点的关键字的值均小于根节点关键字的值。
  2. 若它的右子树不为空,则右子树上的左节点的关键字的值均大于根节点关键字的值。
  3. 左右子树又分别是一颗二叉排序树
  • 什么是平衡二叉(AVL)树?
    平衡二叉树首先是二叉查找树,由于树越矮查找效率越高,就有了二叉查找树。二叉平衡树中所有平衡因子只能是-1,0,1三个值

  • 什么是平衡因子?
    一个结点的平衡因子为其左子树的高度减去右子树高度的差。

  • 什么是红黑树?

  • 漫画讲解

  • link

  • 红黑树是一颗二叉搜索树,它相对二叉搜索树增加了一个存储位来标识结点颜色,可以使 Red 或 Black。通过对任何一条从根到叶子的简单路径上各个结点的颜色进行约束,确保没有一条路径会比其他路径长出两倍。

  • 红黑树有什么特点?

  • 1.节点是红色或黑色。

    2.根节点是黑色。

    3.每个叶子节点都是黑色的空节点(NIL节点)。

    4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

    5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

    简单来说

    1. 根节点和叶子节点是黑色的
    2. 从每个叶子到根的所有路径上不能有两个连续的红色节点
    3. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点
  • 红黑树什么时候调整?

  • 什么情况下会破坏红黑树的规则,什么情况下不会破坏规则呢?我们举两个简单的栗子:

    在举例子之前,我们做一点小小的补充!

    插入之前所有根至外部节点的路径上黑色节点数目都相同,所以如果插入的节点是黑色肯定错误(黑色节点数目不相同),

    而相对的插入红节点可能会也可能不会违反“没有连续两个节点是红色”这一条件,所以插入的节点为红色,如果违反条件再调整

  • 红黑树如何调整?

  • 变色:

    为了重新符合红黑树的规则,尝试把红色节点变为黑色,或者把黑色节点变为红色。

  • 左旋转:

    逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子

    右旋转:

    顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子

相关文章:

  • 负载均衡之基于L3/4负载
  • 跳表
  • 关于CookieUtile的相关代码
  • iOS_15_通过代码自己定义cell_微博UI
  • 排序
  • 哈希冲突解决方法
  • Activiti的引擎与引擎配置对象
  • dfs和bfs
  • ajax done和always区别
  • 数据库三大范式
  • 一个最小化的SpringBoot项目
  • char 和 varchar 的区别?
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Mysql的存储引擎以及区别
  • java编写一个端口扫描器
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • C++类中的特殊成员函数
  • create-react-app做的留言板
  • CSS 专业技巧
  • C学习-枚举(九)
  • Docker 笔记(2):Dockerfile
  • ES6核心特性
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java IO学习笔记一
  • java正则表式的使用
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • tab.js分享及浏览器兼容性问题汇总
  • Vue 动态创建 component
  • 深度解析利用ES6进行Promise封装总结
  • 我与Jetbrains的这些年
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Spring第一个helloWorld
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (3)nginx 配置(nginx.conf)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C++20) consteval立即函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)linux使用docker容器运行mysql
  • (二)pulsar安装在独立的docker中,python测试
  • (二十三)Flask之高频面试点
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (分享)自己整理的一些简单awk实用语句
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)程序员技术练级攻略
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net MySql
  • .NET Reactor简单使用教程