红黑树

概述

红黑树是AVL树的一个变种.

它具有如下性质:

  1. 每个节点是红色的或者黑色的
  2. 根节点是黑色的
  3. 如果一个节点是红色的,则其子节点必须是黑色的(即不存在父子节点同为红色)
  4. 从任一节点到其各个叶子节点的所有路径都包含相同数目的黑色节点
  5. 每个NIL节点(或称为空节点)可当作黑色的
    (性质5,一些书籍没将其作为性质,其存在主要是方便分析插入和删除操作)

通过性质1,3,4可以得知:
1.任意节点最大子树高度(或树深)和最小子树高度(或树深)之比在1到2之间.
2.红黑树的高度最多是2log(N+1)

因此,在红黑树中查找,其查找算法的时间复杂度为O(logN).

红黑树相比于AVL树的优点是,由于其对树高度要求的放宽,使其更容易的插入和删除,从而提高插入和删除的性能.

根据性质,有如下推论:
推论1: 红色节点必有父节点
推论2: 如果一个节点有黑色子节点,则必为双子树节点

红黑树的插入

默认插入节点的颜色是红色 1.空树插入.
插入节点由红色改为黑色,此节点即为根节点,满足性质2:
2.插入节点的父节点颜色是黑色.
直接插入节点,不会违反任何性质.
3.插入节点(x)的父节点(xp)颜色是红色.
由性质2,3可知,父节点(xp)一定还有父节点(xpp), 即插入节点(x)有祖父节点(xpp),且祖父节点(xpp)是黑色
I.父节点(xp)的兄弟节点是红色.
  xp的兄弟节点xppr是红色
  转换后
 祖父节点(xpp)作为插入节点(x)的递归向上节点.如果祖父节点(xpp)是根节点,则直接变为黑色节点.
 
II.父节点(xp)的兄弟节点是黑色(没有用兄弟节点时,按性质5,将空节点视为黑色节点).
  xp的兄弟节点xppr是黑色
  右旋
 父节点(xp)与祖父节点(xpp)颜色交换,然后右旋
 如果插入节点(x)是父节点(xp)的左子节点,需在插入节点(x)和其父节点(xp)之间做一次左旋.

红黑树的删除

删除情况分为: 1.删除节点有双子树
将其与其右子树的最小节点进行位置和颜色交换. 删除则变为了2或3
2.删除节点有单子树
由性质3,4可知,删除节点是黑色,其子节点是红色.直接由其子节点替换它,并将子节点设为黑色.
3.删除节点没有子树
如果删除节点是红色,直接删除,不违反任何规则
如果删除节点(d)是黑色(由性质4,此节点必有兄弟节点(b)):
I.兄弟节点(b)为黑色,且b的右子节点(br)为红色
  b的右子节点为红色
  新平衡
兄弟节点(b)与父节点(p)交换颜色,然后左旋,并将兄弟节点(b)的右子节点(br)设为黑色
II.兄弟节点(b)为黑色,且b的右子节点为黑色,左子节点为红色
  b的右子节点为黑色,左子节点为红色
  转换后
 B和Bl交换颜色,并以B做右旋,此时变为了I所述
 
III.兄弟节点(b)为黑色,且b的右子节点为黑色,左子节点也为黑色
a.删除节点(d)的父节点(p)为红色
  父节点(p)为红色
  新平衡
 父节点(p)与兄弟节点(b)交换颜色
b.删除节点(d)的父节点(p)为黑色
  父节点(p)为黑色
  父节点(p)左右子树都减少一
 父节点(p)左右子树都减少一,p做为D的递归向上传导节点.如果p为根节点,则整棵树所有路径上黑节点数减一
IV.兄弟节点(b)为红色
兄弟节点(b)为红色
转换后
兄弟节点(b)与父节点(p)交换颜色,然后左旋.问题变换为:删除节点(d)的兄弟节点(b)为黑色,且父节点(p)为红色的问题,见前面I,II,III
《宾馆客房管理系统》是一个基于C#与MySQL的项目,旨在帮助学习者掌握数据库管理和系统开发知识。该项目通过完整代码实现,将编程技术应用于宾馆客房管理的实际业务场景。 C#是微软开发的面向对象编程语言,广泛用于Windows应用程序开发。在本项目中,C#用于构建用户界面、处理业务逻辑以及与数据库交互。它拥有丰富的类库,便于开发复杂图形用户界面(GUI),并通过ADO.NET组件实现与MySQL数据库的连接。MySQL是一种流行的开源关系型数据库管理系统(RDBMS),常用于Web应用程序,用于存储客房、预订、客户等核心数据。通过SQL语句,开发者可对数据进行增、删、改、查操作。系统中可能涉及“客房表”“预订表”“客户表”等,包含客房编号、类型、价格、预订日期等字段。 数据库连接是系统的关键部分。C#通过ADO.NET的SqlConnection类连接MySQL数据库,连接字符串包含服务器地址、数据库名称、用户名和密码。用户下载项目后,需根据本地环境修改连接字符串中的用户名和密码。系统主要功能模块包括:客房管理,可展示、添加、修改、删除客房信息;预订管理,处理预订的查看、新增、修改和取消;客户管理,存储和管理客户个人信息;查询功能,支持按客房类型、价格范围、预订日期等条件查询;报表和统计功能,生成入住率、收入统计等报表辅助决策。开发者需编写C#方法对应数据库操作,同时设计直观易用的界面,方便用户完成预订流程。项目中的MySQL文件可能是数据库脚本或配置文件,包含建表、数据填充及权限设置等内容,用户需在本地测试前运行脚本设置数据库环境。 总之,该系统结合C#和MySQL,为学习者提供了一个涵盖数据库设计、业务逻辑处理和界面开发的综合实践案例,有助于提升开发者在数据库应用和系统集成方面的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值