代码改变世界

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!-【码炫课堂收费课节选之-红黑树源码解析及手写红黑树】

2022-01-25 17:41  cascle  阅读(267)  评论(0编辑  收藏  举报

1.红黑树前置知识:二叉排序树常见操作详解

Treemap:Doug Lea和Josh Bloch

优化了原始红黑树

 

红黑树:二叉树基础上进行染色,达到一种黑色平衡,即每个分支黑色节点数目一致

 

 

 

 

 

 

 

 

 

 

 

 二叉查找树:上图投影部分可以看到是按顺序排列的,向一只手压下来压平

 

一样

 

 

 

 

 

 

 

这里讲义写错了,正确的:前序是:根左右;中序是:左中右;后序是:左右根。

这里的“前中后”指的是根节点在哪里

 

 前驱、后继:中序二叉树排列

小于的节点可以无穷无尽,但一定有个最大的;大于的节点也可以无穷无尽,但总有一个最小的

有两个孩子的节点的前驱、后继节点一定是叶节点,最大、最小决定了这个性质

临近紧挨的俩叶子节点

 

这里说错了, 叶子节点没有左右孩子但是有前驱和后继

有两个节点就是用前驱或者后继节点代替,这俩节点有个性质:那就是一定是叶节点,并且满足大小排序规则,所以替代没有影响。长兄为父

 

2.红黑树前置知识-二叉排序树-avl树-红黑树性能比较详解

 

 左旋右旋:不改变前驱和后继

右旋:左孩子提起来交换位置,自己去右子树

左旋:右孩子提起来交换位置,自己去左子树

谁不平衡谁转,旋转先从子树后到根节点,这样子树自己先平衡了父树一般也就平衡了

旋转前后为什么会等价?

 

红黑树:平衡所以查找快但是新增、删除旋转次数少,是二叉搜索树和avl树的折中

红黑树放宽了平衡的条件,对高度差距不那么严苛