红黑树(上)

排序二叉树虽然效率较高,可以快速 的检索,但是当要插入的节点本身就是有序的,那么所有的节点构成链表。如果插入的节点本身按照从大到小的顺序插入,那么所有节点都只有左子节点,如果节点本身按照从小到大的顺序排列,那么所有节点都只有右子节点,排序二叉树变为普通的链表,此时其检索效率就会很低。

为了改进排序二叉树的不足,本文从2-3查找树谈起,构造一种二分查找树——红黑树,介绍红黑树的插入删除等操作。

1、2-3查找树

2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树与满二叉树相似。高为h的2-3树包含的节点数大于等于高度为h的满二叉树的节点数,即至少有2^h-1个节点。

1.1 2-3查找树的定义

一棵2-3查找树或为一棵空树,或由以下节点组成:

  • 2-节点:含有一个键(及其对应的值)和两条链接,左链接指向的2-3树中的键都小于该节点,右链接指向的2-3树中的节点都大于该节点。
  • 3-节点:含有两个键(及其对应的值)和三个链接,左链接指向的2-3树中的键都小于该节点,中链接指向的键都位于该节点的两个键之间,右链接指向的2-3树中的节点的键都大于该节点。

2-3查找树如下图所示:

这里写图片描述

1.2 2-3查找树的查找

要查找一个键,首先判断它和根节点的键是否相等,若相等则查找命中,否则根据比较的结果在相应的子区间继续递归查找,如果是空连接,查找未命中。

这里写图片描述

1.3 2-3查找树的插入
1.3.1 向2-节点中插入新键

这里写图片描述

1.3.2 向一棵只含有一个3-节点的树中插入新键

这里写图片描述

1.3.3 向一个父节点为2-节点的3-节点中插入新键

这里写图片描述

1.3.4 向一个父节点为3-节点的3-节点中插入新键

这里写图片描述

1.3.5 分解根节点

如果从插入节点到根节点的路上全都是3-节点那么根节点最终变为一个临时的4-节点,此时需要将此4-节点分解,将一个4-节点分解为2-3树可能有6中情况:

这里写图片描述

1.4 2-3查找树的简要总结
  1. 局部变换:2-3查找树的以上这些操作都是局部的:除了相关的节点和链接外。不必处理其他的节点和链接。每次变换,需要处理的链接数量不会超过一个很小的常数,并且树中任何地方,只要符合相应的模式,都可以进行相应的变换。
  2. 全局性质:以上局部变换不会影响树的全局有序性和平衡性,任意空链接到根节点的路径长度都是相等的。
  3. 在一棵大小为N的2-3树中,查找和插入操作访问的节点必然不超过lgN个。

但是实现2-3查找树的操作,我们需要维护两种不同类型的节点,实现这些操作需要处理的情况大大增加,实现的代码量较大,为此,我们介绍一种红黑二叉查找树的数据结构来表达实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值