二叉排序树与红黑树

二叉排序树

概念

二叉排序树(Binary Sort Tree)(BST),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。

举例

1
2
3
5
6
7
8
9
10
11
12
13
15

这种数据结构有什么好处?
答:便于遍历,插入
比如我们来插入一个 14 试试:
先找根节点 9 ,比 9 大,到 13,比 13 大,到15,比15小,放15左下。
其实就是二分法查找的思想,查找所需的最大次数等同于二叉树的高度

缺陷

100
200
300

比如现在的树是这样的,我们插入的数据都是1-100的数字,那么都会插入到左边,树的两边不平衡,那么如何变成一颗平衡二叉树呢?有好几种算法,其中包括AA树、AVL树、红黑树等等。今天我们重点讲 红黑树!!

红黑树

红黑树性质

红黑树就是一种平衡的二叉查找树,说他平衡的意思是他不会变成“瘸子”,左腿特别长或者右腿特别长。除了符合二叉查找树的特性之外,还具体下列的特性:

  1. 节点是红色或者黑色
  2. 根节点是黑色
  3. 每个叶子的节点都是黑色的空节点(NULL)
  4. 每个红色节点的两个子节点都是黑色的。
  5. 从任意节点到其每个叶子的所有路径都包含相同的黑色节点。

标准红黑树

1
N
6
8
11
13
15
17
22
25
27
N
N
N
N
N
N
N
N
N
N

当我们在红黑树中插入或者删除结点的时候,红黑树会被破坏,那应该怎么办呢?

红黑树的变换

主要是变色和旋转(左、右)
比较麻烦,省略…

应用

在 C++ 的 STL 中的 map 就是用的红黑树,在 java 中 Tree Map 也是用的红黑树,也就是我们平常用的键值对,在函数中实现关联数组也是用的红黑树,还有实时计算、图像处理的几何计算中也用到

人生感悟

人生像红黑树一样,总是需要某种平衡

一边是给予,一边是接受

一边是付出,一边是得到

一边是耕耘,一边是收获

一边是物质,一边是精神

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章