红黑树高度上限的证明(通俗易懂)
先把结论放上,设红黑树的高度为h,总结点数为n,那么h与n的关系就是
下面开始证明过程
首先,从任意节点出发,到其子树的叶子节点的路径中黑色节点的数量称为该节点的黑高,即
bh
我们设根节点为T,那么根节点的黑高就是
bh(T)
根据红黑树的性质,我们可知红色节点不可相邻(即红色节点的父节点和孩子节点均为黑色),但是性质中并没有对黑色节点进行要求
换句话说,所有的黑色节点可以挨在一起,一棵红黑树可以全部都是黑色节点。
那么我们就假设一棵只有黑色节点的红黑树(此假设仅作为一个思路提供,可能深究并不严谨),那么它的黑高bh(T)就是它的树高,我们可得这样一棵树的结点数为(根据树的高度与节点数量的关系)
而对于红黑树而言,我们还要考虑红色节点,所以在此基础上加上红色节点的数量,那么不论加几个红色节点,只要增加,一定满足下式
(1)
而根据红黑树的性质,我们可知根节点的黑高bh(T)至少为h/2 (h为树高),也就是说
(2)
根据(1)式(2)式,我们可得
即
然后稍微计算一下就得到了
红黑树高度上限的证明(通俗易懂)相关推荐
- 红黑树高度上限(2lg(n+1)证明.
UTF8gbsn 红黑树介绍 红黑树是一颗二叉树,并满足以下属性. 每一个节点要么红色要么黑色. 根节点是黑色. 所有叶子节点NIL是黑色. 红色节点的左右孩子必定是黑色节点. 从任何一个节点出发,并 ...
- 红黑树相关定理及其证明
红黑树有一条性质要求:如果一个节点为红色的,则它的两个子节点都是黑色.这保证了:从根到叶节点(不包括根节点)的任何一条路径上都至少有一半的节点是黑色的.(红黑树的性质还要求:对每一个节点,从该节点到其 ...
- 红黑树的性质以及时间复杂度证明
很久就想写一篇红黑树的博客,一直没有倒出时间,今天想稍微的总结下红黑树,但是并不想介绍如何的进行插入删除,以及怎么进行旋转,变色,本编文章主要讲解红黑树的时间复杂度的证明,要想证明红黑树的时间复杂度, ...
- 红黑树(一)之 原理和算法详细介绍---转帖
目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树的基本操作(一) 左旋和右旋 5 红黑树的基本操作(二) 添加 6 红黑树的基本操作(三) 删除 作者:Sky W ...
- Java数据结构与算法:红黑树
概要 概述:R-B Tree,又称为"红黑树".本文参考了<算法导论>中红黑树相关知识,加之自己的理解,然后以图文的形式对红黑树进行说明.本文的主要内容包括:红黑树的特 ...
- 红黑树(一)之 原理和算法详细介绍
出处:http://www.cnblogs.com/skywang12345/p/3245399.html 概要 目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树 ...
- 红黑树 —— 原理和算法详细介绍
红黑树 -- 原理和算法详细介绍 R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为"红黑树",它一种特殊的二叉查找树.红黑树的每个节点上都有存储位 ...
- 红黑树的删除_红黑树
红黑树是许多"平衡的"查找树中的一种,它能保证在最坏的情况下,基本的动态集合操作(插入和删除)的时间为O(lgh).我们先简单叙述二叉查找树的性质. 1.1 二叉查找树 二叉查找树 ...
- 红黑树的深入分析和实现
RB-Tree, 红黑树(Red Black Tree) 1. 简介 1.1 定义 首先红黑树是一棵二叉搜索树,节点除了二叉树基本元素之外,还包括颜色信息,即节点包含key.left.right.p. ...
- 红黑树时间复杂度为什么是O(logn)?
一.红黑树性质 结点必须是红色或者黑色. 根节点必须是黑色. 叶节点(NIL)必须是黑色(NIL节点无数据,是空节点). 如果一个节点是红色的,则它的子节点必须是黑色的. 从任一节点出发到其每个叶子节 ...
最新文章
- FFmpeg windows软件开发环境搭建
- Python + Selenium 自动发布文章(二):简书
- Android Camera设置setPreviewCallback实现onPreviewFrame接口实时截取每一帧视频流数据
- Django学习小记[2] —— Model
- 前美团产品专家罗鑫:谈谈我对增长这件事的理解
- oracle从一个表insert语句,Oracle 使用PLSQL 导出 一个表的insert 语句
- Acer Travelmate T3290笔记本拆机指南
- abap 添加alv上的工具栏的按钮_Excel里的置顶功能——快速访问工具栏
- Python中对列表list进行定义、增删改查、遍历及与元组的对比
- golang基础之初识
- 解决maven项目jdbc报错:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- DNN Mail功能介绍 [DNN 3.2.2]
- SpringBoot学习---SpringSecurity与Shiro
- python调用v8_Python 安装 V8 引擎 – pyv8
- 集成 push kit 签名配置报6003/收不到华为推送
- 即席查询-Kylin
- Ubuntu软件中心的完全启用
- 有理数加法C语言pta,有理数
- 手把手带你了解Spark作业“体检报告” --Spark UI
- 硬盘安装archlinux
热门文章
- 2020,咋赚钱?|【常垒·常识】
- Spring Aop详解(无参和带参)
- 小学生如何学计算机,作为小学生该如何学编程?
- 《赖氏经典英语语法》第三集
- 爱思助手更新后无法连接服务器,爱思助手无法连接手机怎么办 爱思助手连接失败问题解决办法...
- 亚马逊防关联方法适合shopee平台吗?
- win10 软路由_软路由和硬路由的区别分析
- linux清理根目录空间,如何快速清理Linux磁盘空间
- beamer插入参考文献并引用(BibTex)
- 南大计算机系统基础实验PA0笔记