二叉排序树
概念
二叉排序树(Binary Sort Tree)(BST),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
举例
这种数据结构有什么好处?
答:便于遍历,插入
比如我们来插入一个 14 试试:
先找根节点 9 ,比 9 大,到 13,比 13 大,到15,比15小,放15左下。
其实就是二分法查找的思想,查找所需的最大次数等同于二叉树的高度
缺陷
比如现在的树是这样的,我们插入的数据都是1-100的数字,那么都会插入到左边,树的两边不平衡,那么如何变成一颗平衡二叉树呢?有好几种算法,其中包括AA树、AVL树、红黑树等等。今天我们重点讲 红黑树!!
红黑树
红黑树性质
红黑树就是一种平衡的二叉查找树,说他平衡的意思是他不会变成“瘸子”,左腿特别长或者右腿特别长。除了符合二叉查找树的特性之外,还具体下列的特性:
- 节点是红色或者黑色
- 根节点是黑色
- 每个叶子的节点都是黑色的空节点(NULL)
- 每个红色节点的两个子节点都是黑色的。
- 从任意节点到其每个叶子的所有路径都包含相同的黑色节点。
标准红黑树
当我们在红黑树中插入或者删除结点的时候,红黑树会被破坏,那应该怎么办呢?
红黑树的变换
主要是变色和旋转(左、右)
比较麻烦,省略…
应用
在 C++ 的 STL 中的 map 就是用的红黑树,在 java 中 Tree Map 也是用的红黑树,也就是我们平常用的键值对,在函数中实现关联数组也是用的红黑树,还有实时计算、图像处理的几何计算中也用到
人生感悟
人生像红黑树一样,总是需要某种平衡
一边是给予,一边是接受
一边是付出,一边是得到
一边是耕耘,一边是收获
一边是物质,一边是精神