数据结构与算法—2-3查找树 红黑树

1 2-3查找树

1.1概念

名称 key个数 节点
2节点(2-node) 1 2
2节点(2-node) 2 3
  1. 要么为空,要么:
  2. 对于2节点,该节点保存一个key及对应value,以及两个指向左右节点的节点,左节点也是一个2-3节点,所有的值都比key有小右节点也是一个2-3节点,所有的值比key要大
  3. 对于3节点,该节点保存两个key及对应value,以及三个指向左中右的节点。左节点也是一个2-3节点,所有的值均比两个key中的最小的key还要小中间节点也是一个2-3节点,中间节点的key值在两个跟节点key值之间右节点也是一个2-3节点,节点的所有key值比两个key中的最大的key还要大
    在这里插入图片描述
    如果中序遍历2-3查找树,就可以得到排好序的序列。在一个完全平衡的2-3查找树中,根节点到每一个为空节点的距离都相同。

1.2要求

1.3操作

1.3.1插入

  1. 往一个2-node节点插入 往2-3树中插入元素和BST插入元素一样,首先要进行查找,然后将节点挂到未找到的节点上。 如果查找后找到的节点是一个2-node节点,只需要将新的元素放到这个2-node节点里面使其变成一个3-node节点即可
    在这里插入图片描述

  2. 往一个3-node节点插入往一个3-node节点插入一个新的节点可能会遇到很多种不同的情况。

  3. 有3种情况
    1: 只包含一个3-node节点
    2:节点是3-node,父节点是2-node
    1:当插入的节点是3-node的时候,将该节点拆分,中间元素提升至父节点
    2:但是此时父节点是一个3-node节点,插入之后,父节点变成了4-node节点,然后继续将中间元素提升至其父节点
    3:直至遇到一个父节点是2-node节点,然后将其变为3-node,不需要继续进行拆分。

3:节点是3-node,父节点也是3-node
1:当插入的节点是3-node的时候,将该节点拆分,中间元素提升至父节点,
2:但是此时父节点是一个3-node节点,插入之后,父节点变成了4-node节点,
3:然后继续将中间元素提升至其父节点,直至遇到一个父节点是2-node节点,然后将其变为3-node,不需要继续进行拆分。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中有特殊情况
1:根节点分裂

根节点到子节点都是3-node节点的时候,这是如果要在字节点插入新的元素的时候,会一直查分到跟节点,在最后一步的时候,跟节点变成了一个4-node节点,这个时候,就需要将跟节点查分为两个2-node节点树的高度加1

在这里插入图片描述

1.3.1删除

2红黑树

2.1概念

  1. 红黑树是一种具有红色和黑色链接的BST
  2. 节点是红色或黑色
  3. 根节点和叶子节点(NIL节点)都是黑色
  4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  5. 任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

2.2背景

2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂。红黑树是一种简单实现2-3树的数据结构。

发布了27 篇原创文章 · 获赞 4 · 访问量 1342

猜你喜欢

转载自blog.csdn.net/weixin_45639955/article/details/104280200
今日推荐