微信搜索【NO编程】,关注这个与众不同的公众号。
个人网站:www.newobject.cc
版权声明:本文为原创文章,转载请注明出处。
红黑树是比较常见的数据结构之一,在 Linux 内核中的完全公平调度器、高精度计时器、多种语言的函数库(如,Java 的 TreeMap)等都有使用。
在学习红黑树之前,先来熟悉一下二叉查找树。
二叉查找树(Binary Search Tree)
二叉查找树,它有一个根节点,且每个节点下最多有只能有两个子节点,左子节点的值小于其父节点,右子节点的值大于其父节点。

插入节点
从根节点向下查找,当新插入节点大于比较的节点时,新节点插入到比较节点的右侧,当小于比较的节点时,插入到比较节点的左侧,一直向下比较大小,找到要插入元素的位置并插入元素。
如图: 依次插入节点[100,50,200,80,300,10]

伪代码(来源 Java TreeMap,有省略和修改):
void put(K key, V value) {
if (root == null) {
root = new Node<>(key, value, null);
return;
}
Node<K,V> t = root;
int cmp; // 比较结果
Node<K,V> parent;
Comparable<? super K> k = (Comparable<? super K>) key;
do {
parent = t;
cmp = k.compareTo(t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return; // 节点存在直接返回
} while (t != null);
Node<K,V> e = new Node<>(key, value,
最低0.47元/天 解锁文章
556

被折叠的 条评论
为什么被折叠?



