其他分享
首页 > 其他分享> > 2-3查找树

2-3查找树

作者:互联网

红黑二叉查找树(原理、实现)

1. 什么是2-3查找树

对于普通的二分查找树,我们希望树的高度永远都是lgN,这样所有的查找操作都能在lgN次比较内结束,但是在动态插入中要保证树的完美平衡的代价太高了;

为了保证查找树的平衡性,我们需要一些灵活性,稍微放松点完美平衡的要求,允许树种的一个结点保存多个键,也就是2-3查找树(B-树)

一个2-3查找树或是一个空树,或是由下列结点组成:

  • 2-结点:含有1个键与2条连接线的结点,其与标准二叉树的结点性质一样,x.left < x < x. right。
  • 3-结点:含有2个键与3条连接线的结点,其中左连接线都小于2个键,中连接线在2个键之间,右连接线都大于2个键。

在这里插入图片描述
一颗完美平衡的2-3查找树中的所有空链接到根节点的距离都应该是相同的

2. 查找

设查找的键为key,查找的节点为x。与二叉树相似:

在这里插入图片描述

3. 插入

先进行一次未命中查找。如果命中,则替换value。如果没有命中,则创建新结点挂在树的底部。但是直接挂在树的底部会有些问题,破坏了树的平衡性,我们想要保持插入也是平衡的,所以会进行变化

3.1 向2-结点 h 中插入

① 如果h无子结点或h的子结点是2-结点,则与二叉树一样插入,2-结点变3-结点。
在这里插入图片描述

3.2 向3-结点 h 中插入

① 如果向只含有一个3-结点的树插入,则3-结点变4-结点。这个情况则需要稍微变形处理下,可以将4-结点转化为2个2-结点。

规定:4-结点中有3个键,4个连接线。中间的键可以提到上面,成为左右两个键的父结点,此时树的高度+1。由于变换的是根节点,依然维持了完美平衡性。

在这里插入图片描述

② 向父结点为2-结点的3-结点 h插入(接上),则3-结点变4-结点。变换后,提上来的中间键与父结点合并,注意,此时仍要保持父结点内键的大小顺序
在这里插入图片描述
③ 向父结点为3-结点的3-结点 h插入,则子结点变为4-结点,变换后父结点也变为4-结点,则再次向上变换,直至没有4-结点。
在这里插入图片描述
④ 如果插入的路径向上全是3-结点,则我们的根节点变为临时的4-结点,此时我们可以向情况1.中所描述的处理,分解4-结点,树的高度+1。
在这里插入图片描述

请注意,2-3树中任何4-节点的分解与转化,均是局部操作,不会影响到树的平衡性!
只要符合相应的形态,变换即可进行。

4. 性能

2-3树的高度必然在 (logN)/(log3) ~ logN 之间,故增删查改的性能也在 O[ (logN)/(log3) ]~ O( logN ) 之间。

今天又学java了 发布了69 篇原创文章 · 获赞 0 · 访问量 1440 私信 关注

标签:连接线,结点,插入,个键,查找,key
来源: https://blog.csdn.net/weixin_43907800/article/details/104122141