技.艺.道:红黑树的结构及相关操作(三种遍历、两种旋转等等)

一、结构介绍

1、树

特性:整棵树只能有一个树根,节点间不可交叉和成环。

2、二叉树

特点:

在树的基础上,

每个节点上最多有两个子节点

3、二叉搜索树

特点:

在二叉树的基础上,

有序。即在每棵子树中,均有:左子节点的值<根节点的值<右子节点的值。

4.自平衡二叉查找树

特点:

在二叉搜索树的基础上,

自平衡。即在当有新的节点加入或旧的节点删除时,会通过一些节点的旋转,自动调节树的结构,使树保持平衡的结构,以保持较高的查询效率。

5.、红黑树

特点:

平衡二叉搜索树的基础上,

有颜色。即通过与颜色相关的红黑树5性质限定了红黑树自平衡的程度,使其不是严格意义上的平衡二叉树。平衡二叉树过于严格的限制了高度差不得超过1,会使树的结构调整过于频繁。这也是为什么要有红黑树。

  • 红黑树5性质:
  • 性质1.(红黑)节点是红色或黑色。
  • 性质2.(黑根)根节点是黑色。
  • 性质3.(黑叶)所有叶子都是黑色。(叶子是NULL节点)
  • 性质4.(二黑) 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 性质5.(黑高)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

二、操作

0.二分查找

 

1.遍历

前序遍历:

方法:

所谓前序遍历,就是根节点在前面访问,左节点始终哎右节点前访问。所以是:根->左子->右子

中序遍历:

特点:

所谓中序遍历,就是根节点在中间访问,左节点始终哎右节点前访问。所以是:左子->->右子

后序遍历:

方法:

所谓后序遍历,就是根节点后访问,左节点始终哎右节点前访问。所以是:左子->右子->

2.最值

2.1 最小值:

左支尽头的叶子节点为最小值。即从根节点出发一直沿着左子节点找,直到没有左子节点,到达的叶子节点则为该二叉搜索树(红黑树也是一样)的最小值所在的节点。

2.2 最大值:

右支尽头的叶子节点为最大值。即从根节点出发一直沿着右子节点找,直到没有右子节点,到达的叶子节点则为该二叉搜索树(红黑树也是一样)的最大值所在的节点。

3.删除(叶子节点、有一个子节点,有两个子节点)

3.1 删除没有子节点的节点:

将其父节点指向该节点的引用改为指向null即可。该节点从引用链上脱离,即会在GC时被回收。

3.2 删除有一个子节点的节点

子节点直接取而代之。

3.3 删除有两个子节点的节点

后继节点:比某个节点的值大的最小节点。

使用被删节点的后继节点替换被删节点。

 

4.最坏时间复杂度

设从N个元素中查找一个元素最坏情况需要K次查到,查到即剩余待查询的元素数量为1.

则有:N/(2^K)=1

变换得:K=log2(N)

所以,时间复杂度为:O(log2(N)) ==> O(logN)

 

5.旋转操作

无论是左旋还是右旋,都是一个“逆转”的过程,即一逆二转。

5.1 左旋

过程:

逆:一个关系线(原子树根节点与新子树根节点之间的)变为原来的逆向;

转:

一个关系线(新子树根节点与其原左子节点之间的)将起点向左转到原子树根节点上,

一个关系线(原子树的根节点与其父节点之间的)将终点向右旋转到新子树根节点上

右旋:

过程:

逆:一个关系线(原子树根节点与新子树根节点之间的)变为原来的逆向;

转:

一个关系线(新子树根节点与其原右子节点之间的)将起点向右转到原子树根节点上,

一个关系线(原子树的根节点与其父节点之间的)将终点向左旋转到新子树根节点上

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