平衡二叉树与红黑树 2019-12-17(未经允许,禁止转载)

1.平衡二叉树

1.1平衡二叉树的定义

平衡二叉树,又叫平衡二叉搜索树,首先是一种特殊的二叉查找树树的每个结点的左子树和右子树的高度差至多等于1

令F(n)表示n层平衡二叉树的最少节点,则F(n)=F(n-1)+F(n-2)+1
这是个类似斐波那契的递推数列

1.2为什么需要平衡二叉树

对一棵查找树进行增删查等动作,时间消耗与树的高度h成比例,并不与树的容量n成比例。为了便利我们的增删查工作,需要让树维持矮矮胖胖的好身材,也就是让h维持在O(lgn)左右。而平衡树,正是维持矮胖身材的优质树种

对于一棵普通的二叉查找树,插入新结点总可以在叶子结点进行,删除结点也可以使用被删除结点的逻辑后继结点直接替代被删除结点。因此,普通二叉查找树的增删非常容易,但需要承受的代价是操作后的二叉查找树结构不可控,不能总是维持矮胖的身材

因此,我们需要自平衡的二叉树,在插入和删除的时候,通过旋转操作将高度保持在logN
两款具有代表性的平衡树分别为AVL树和红黑树

2.红黑树(RBTree)

2.1红黑树定义 --- 头尾黑,不连红,路等黑

  • 1.结点不是红色就是黑色
  • 2.头尾黑。根是黑的,空结点也是黑的
  • 3.不连红。不存在两个连续的红结点
  • 4.路等黑。任一结点到每个叶子结点的路径含有的黑色结点数量相同。这是对树的高度进行约束,保证树能够满足平衡状态

不连红+路等黑 是红黑树在增删后调整树结构的2大准则

根据这两大准则,一棵红黑树不可能以下面的单支形式为枝末

红黑树不可能的树枝枝末

红黑树可能的树枝枝末只有2种【单支黑-红】或者【拥有同色双孩子的倒V形结构】

红黑树的结点结构体如下:

# 红黑树结点结构体 
class  Node<T>{
   public  T value;  # 值
   public  Node<T> parent; # 父节点
   public  Node<T> left; # 左孩子
   public  Node<T> right; # 右孩子
   public  boolean isRed; # 颜色标记
}
相比普通的二叉树结点结构,红黑树的结点结构多了**父节点**和**颜色标记**

2.2二叉树的旋转

旋转包括左旋右旋

左旋

左旋,指一棵树的根节点被其右孩子旋转取代,旋转后,原右孩子的左支将挂载到原根结点的右支,这通过大小关系很容易理解

右旋

右旋,指一棵树的根节点被其左孩子旋转取代,旋转后,原左孩子的右支将挂载到原根结点的左支

旋转可以改变二叉树的结构,使其由不平衡转为平衡

2.3红黑树的插入

  • RBTree的插入与普通的平衡二叉树的插入方式一致,都在叶子结点进行插入
  • 由于红黑树路等黑的特性,在对红黑树进行插入操作时,插入的结点必为红色
  • 当且仅当插入结点的父结点为红色时,由于出现连红,需要对树进行旋转操作和颜色修复。显然,如果插入结点的父节点为黑色,那么不会对红黑树的任何性质造成破坏,无需修复

总结起来就是

【在合适的叶子插入红色结点,与父连红则进行插入修复。修复的目的是将父结点变成黑色,通过直接的颜色变换或者旋转后再颜色变换实现】

当插入结点的父结点是红色时,其叔叔结点要么是红色,要么为空,不可能是黑色,否则若为黑色,将违反路等黑规则;同时,其祖父结点必为红色,否则违反不连红规则

case1:插入结点的叔叔结点也是红色

这种情况下,插入结点的父结点和叔叔结点都是红色,根据不连红规则,其祖父结点必为黑色。那么将祖父结点涂红,父结点和叔叔结点涂黑即可(也就是交换颜色)如果祖父结点涂红后产生连红,继续修正

case2:插入结点的叔叔结点为空,且祖父节点、父节点和新节点在一条直线上
旋转父结点 + 父结点与祖父结点交换颜色

红黑树插入case2

case3:插入结点的叔叔结点为空,且祖父节点、父节点和新节点不在一条直线上
先旋转新结点,将祖父节点、父节点和新节点调整在一条直线上,即转化为case2,然后按case2方法处理

红黑树插入case3

2.4红黑树的删除

红黑树的删除和上面提到的平衡二叉树的删除一样,叶子结点直接删除,中间结点使用其逻辑后继结点替代。如果删除的是红结点,无需调整;如果删除的是黑结点,则会影响路等黑的规则,需要调整


我认为,删除操作的思想这样比较好理解,也应该是这样的:

结点node被删除,实际上是【node的值变为其逻辑后继结点的值,然后逻辑后继结点被真正删除】。当后继结点被删除之后,势必破坏原来的“平衡”,真正被删除结点所在的一支会“变轻”,要重新实现平衡,就要向“轻的”这一支旋转,即向真正被删除结点一侧旋转。旋转后再调色满足要求即可

同理,插入操作的本质思想也是类似的:

插入一个结点,势必增重一侧,要向“轻的”一侧旋转。旋转后再调色


2.5红黑树的增删

红黑树只能增加红结点,并需要【避免连红】

红黑树可以删除任何结点,只在删除黑结点时,需要保持【路等黑】

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 写在前面 当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感...
    安卓大叔阅读 659,290评论 262 1,258
  • 30张图带你彻底理解红黑树 写在前面 当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!...
    雄关漫道从头越阅读 3,147评论 1 75
  • 转载请注明出处!https://www.jianshu.com/p/d9d9f223f0ad Github源码地址...
    yifyif阅读 4,297评论 0 7
  • 【七绝】李花 文/舟亮 入眼飘然深浅白,疑将穿树雪花开。 非因鲜色过而返,缘有清香去又来。 (平水韵,十灰)
    舟亮阅读 974评论 3 14
  • 孙丽 焦点网络初级十期 信阳 坚持分享第226天 星期天下午本来是可以出去逛逛街,洗洗面。但是因为儿子作业没写完,...
    孙丽_cdb3阅读 189评论 0 0