常见的树形结构(一)

说起排序算法,自然少不了树形结构了。本章以其中最经典的红黑树为例,红黑树是一种特殊的二叉查找树,他可以自平衡,且黑节点完全平衡。

一、红黑树的性质

红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质:

二、红黑树的查找

红黑树是二叉查找树的一种,所以红黑树仍然遵循二叉查找树的性质。即一个节点的左子树都比该节点小,右子树都比该节点大。所以仍然可以按照二叉查找树查找某元素的方法来查找。

三、红黑树添加

按照红黑树的性质5来看,添加的节点一定是红色。因为如果节点是黑色,则每次插入都要进行黑平衡的调整。如果插入节点是红色,则只有发生插入节点的父节点为红时,才会触发红黑树自动平衡。所以插入节点默认是红色最有利于与红黑树减小自平衡的开销。
由于红黑树具备自平衡功能,所以插入新节点之前红黑树一定会满足他的5条性质。

这里将红黑树的插入分为两大类,一类是插入节点的父节点是黑色,一类是插入节点的父节点为红色。

1.插入节点的父节点是黑色

那简直是太好,因为红黑树追求的黑平衡,此时插入的节点是默认红色的。不影响黑平衡,所以直接插入即可。

2.插入节点的父节点是红色

由于不满足性质4,所以我们需要让插入后的红黑树进行自平衡。由于插入前的红黑树一定平衡,所以只会出现线面这四种情况。
1.插入节点为父节点的左子节点,且叔叔节点为红色
2.插入节点为父节点的左子节点,父节点是祖父节点的左子4节点,且叔叔节点为黑色(为空表示黑色的哨兵节点 nil)
3.插入节点为父节点的右子节点,父节点是祖父节点的左子4节点,且叔叔节点为黑色(为空表示黑色的哨兵节点 nil)
4.插入节点为父节点的左子节点,父节点是祖父节点的右子4节点,且叔叔节点为黑色(为空表示黑色的哨兵节点 nil)
5.插入节点为父节点的右子节点,父节点是祖父节点的右子4节点,且叔叔节点为黑色(为空表示黑色的哨兵节点 nil)

我们将插入节点进行自底向上的平衡时,又会产生叔叔节点为黑色且不为哨兵节点的情况。
类似于下图

通过归纳法,可以得出

常见的树形结构(一)相关推荐

  1. 组合模式Composite——树形结构不再头疼

    组合模式可以在需要针对"树形结构"进行操作的应用中使用,例如扫描文件夹.渲染网站导航结构等等. 一.什么是组合模式? 组合模式将一组相似的对象看做一个对象处理,并根据一个树状结构来 ...

  2. 玩转Redis-Lua脚本入门到实战-树形结构存储及查询

      <玩转Redis>系列文章 by zxiaofan主要讲述Redis的基础及中高级应用,穿插企业实战案例.本文是<玩转Redis>系列第[16]篇,最新系列文章请前往 公众 ...

  3. 总结下各种常见树形结构的定义及特点(二叉树、AVL树、红黑树、Trie树、B树、B+树)

    文章目录 前言 一棵普通的树 相关术语 二叉树 二叉树性质 二叉树特例 二叉查找树 AVL树 特点及应用 红黑树 特点 应用 Trie树 特点及应用 B树 定义及特点 应用 B+树 B+树的优势及应用 ...

  4. 树形结构在关系数据库中的设计

    在程序设计中,经常以树形结构表示数据的层次关系,如菜单的结构.商品的分类等. 这样的层次结构在关系数据库中难以直观地表示.常见的一种做法是用一个字段指向上级节点来表示记录的上下级关系. fid pid ...

  5. linux 如何以树形结构显示文件目录结构

    linux 如何以树形结构显示文件目录结构 1.linux 如何显示文件信息 一般可用 ls 命令来查看文件的信息: ls [OPTION]- [FILE]- 如: ls 显示所有文件 ls -1 显 ...

  6. html 树形结构_HTML学习之语义化标签

    语义类标签是什么,使用它有什么好处? 语义类标签也是大家工作中经常会用到的一类标签,它们的特点是视觉表现上互相都差不多,主要的区别在于它们表示了不同的语义,比如大家会经常见到的section.nav. ...

  7. 数据库学习,树形结构的数据库表Schema设计方案

    2019独角兽企业重金招聘Python工程师标准>>> 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需 ...

  8. 树形结构 —— 树与二叉树

    [概述] 树是一种非线性的.递归定义的有序数据结构,能很好地描述有分支和层次特性的数据集合. 二叉树是树的一种形态,是 n 个结点的有限集合,该集合或为空集(空二叉树),或由一个根结点与两棵互不相交的 ...

  9. 树形结构叶子节点的作用_树形结构的算法

    树形结构是算法中很常见的一种结构,正好工作中遇到了,就研究一下遍历.深度.查找节点等算法. 遍历 深度优先遍历的思想是从顶点开始,访问其第一个未被访问的邻节点,然后以该邻节点为顶点,重复以上步骤,直到 ...

最新文章

  1. divideSentence
  2. CCIE试验备考之交换SPAN
  3. php layui实现添加input,Layui实现input输入和选择的方法
  4. 20135206于佳心【家庭作业汇总】
  5. dockerfile 安装mysql_dockerfile构建mysql镜像
  6. innobackupex参数之 --throttle 限速这个值设置多少合理 原创
  7. 关于代理服务器与NAT
  8. 微信小程序编辑与显示列表信息
  9. 学计算机拼音摇号,拼音真的很难教?要不要提前学?我们一起陪娃做好这些就够了!...
  10. 零基础学摄影nbsp;跟老邮差一步一…
  11. vue中Echart如何打包下载图片
  12. 第八篇《高速铁路钢轨光带检测系统》论文阅读笔记
  13. Linux进程(二):生命周期
  14. ANSYS apdl软件学习指令(建立三维模型)
  15. 坚持一年背英语单词的总结
  16. 苹果设置网易邮箱收件服务器,苹果手机iphone怎么设置网易邮箱 iphone设置网易邮箱教程【步骤】...
  17. 2021-03-26:给定一个正整数N,表示有N份青草统一堆放在仓库里。有一只牛和一只羊,牛先吃,羊后吃,它俩轮流吃草。 不管是牛还是羊,每一轮能吃的草量必须是:1,4,16,64…(4的某次方)。谁
  18. linux sata驱动加载硬盘顺序,linux安装前必备知识
  19. 解决 Pycharm 使用高版本 python(3.9)报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 之修改pycharm
  20. wpa-supplicant移植

热门文章

  1. 页面滑动与锚点的“完美交互”
  2. C++ Reference: Standard C++ Library reference: C Library: cstdio: stdout
  3. 【程序设计】Java基本语法练习题
  4. MonoRail学习-入门实例篇
  5. 零售界的“GDP联盟” 正在打破流量贫瘠魔咒?
  6. Sublime3安装,使用教程以及优秀的插件推荐
  7. 设备上报二进制数据在 IoT 平台解析实践
  8. 麦克风离计算机主机多远,唱歌的时候,嘴离麦克风多远最好听?
  9. tensorrt pb转uff问题
  10. MAC下的Sublime Text关闭自动更新提示,关闭更新检查,适用于Sublime 3和Sublime 4