教你透彻了解红黑树---第一篇

文章《教你透彻了解红黑树—第一篇》,主要了解了红黑树的来龙去脉和基础属性。

文章《教你透彻了解红黑树—第二篇》,主要说明了红黑树的旋转、插入、删除等操作。

1 背景知识

1.1 二叉树

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

以上参考Wikipedia-binary tree中的介绍

1.2 常见二叉树

  • 完全二叉树:若二叉树的高度是h,除第h层之外,其他(1~h-1)层的节点数都达到了最大个数,并且第h层的节点都连续的集中在最左边。实际上,完全二叉树和堆联系比较紧密哈,同时完全二叉树不一定是满二叉树,反之一定是。

  • 满二叉树:除最后一层外,每一层上的所有节点都有两个子节点,最后一层都是叶子节点。

  • 哈夫曼树:又称为最有数,这是一种带权路径长度最短的树。哈夫曼编码就是哈夫曼树的应用。

  • 平衡二叉树:平衡二叉树又称AVL树(Adelson-Velskii and Landis Tree),左右两个子树的高度差的绝对值不超过 1,其子树也遵循该规则。

  • 红黑树:红黑树是每个节点都带颜色的树,节点颜色或是红色或是黑色,红黑树是一种查找树。红黑树有一个重要的性质,从根节点到叶子节点的最长的路径不多于最短的路径的长度的两倍。对于红黑树,插入,删除,查找的复杂度都是O(log N)。

AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,二人在 1962 年的论文 “An algorithm for the organization of information” 中发表了它

1.3 二叉树详细介绍

有关二叉树的详细说明,请进入这篇文章查看《教你透彻了解二叉树》

2 红黑树简介

2.1 红黑树

先来看看Wikipedia 中有关Red–black tree的介绍:

A red–black tree is a kind of self-balancing binary search tree. Each node of the binary tree has an extra bit, and that bit is often interpreted as the color (red or black) of the node. These color bits are used to ensure the tree remains approximately balanced during insertions and deletions.

简单翻译如下:

红黑树,一种自平衡的二叉查找树,但在每个结点上有一个额外的存储位表示结点的颜色,可以是Red或Black。这些颜色位用来确保红黑树在插入和删除操作后仍能够近乎平衡。

既然红黑树作为一棵二叉查找树(Binary Search Tree, 又称二叉排序树,一个意思),满足二叉查找树的一般性质。下面,来了解下二叉查找树的一般性质。

二叉查找树或者是一棵空树,或者是具有下列性质的二叉树:

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

二叉查找树是一棵动态树,树的结构是变化的,是依据插入或删除后的结构来构成的。

一棵由n个节点组成的二叉查找树,其高度至少为log2(n+1),其一般操作的时间复杂度O(log2(n+1)),这个时间复杂度可以理解成其遍历一次所访问的节点数。但是,如果这棵树退化为一棵链状的树,其时间复杂度就转变为O(n)。

红黑树时间复杂度显然不会为最糟糕的O(n),其操作时间复杂度最糟糕是O(log2(n+1)),这是因为它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡。

维基百科(Wikipedia)中介绍为以下属性:

  1. A node is either red or black.
  2. The root is black. This rule is sometimes omitted. Since the root can always be changed from red to black, but not necessarily vice versa, this rule has little effect on analysis.
  3. All leaves (NIL) are black.
  4. If a node is red, then both its children are black.
  5. Every path from a given node to any of its descendant NIL nodes contains the same number of black nodes. The uniform number of black nodes in the paths from root to leaves is called the black-height of the red–black tree.

简单翻译就是:

  1. 每个结点要么是红的要么是黑的。
  2. 根结点是黑的。
  3. 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。
  4. 如果一个结点是红的,那么它的两个儿子都是黑的。
  5. 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。

下图即是一棵红黑树,图片来源于Wikipedia-binary tree
《教你透彻了解红黑树---第一篇》

》》》注意上图中的叶节点并没有画出来,而是以NIL指针代替,这是因为叶节点在这里并不包含数据,只是作为结束符。

总结:上述内容旨在熟悉红黑树的基本属性,有关其旋转/插入/删除/查找等操作将会在《教你透彻了解红黑树—第二篇目》中详细说明。

    原文作者:算法小白
    原文地址: https://blog.csdn.net/loongshawn/article/details/50414608
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞