C#,红黑树(Red-Black Tree)的构造,插入、删除及修复、查找的算法与源代码

1 红黑树(Red-Black Tree)

如果二叉搜索树满足以下红黑属性,则它是红黑树:

  1. 每个节点不是红色就是黑色。
  2. 根是黑色的。
  3. 每片叶子(无)都是黑色的。
  4. 如果一个节点是红色的,那么它的两个子节点都是黑色的。
  5. 对于每个节点,从节点到后代叶的所有路径都包含相同数量的黑色节点。

红黑树是许多搜索树方案中的一种,它们是“平衡”的,
以便保证在最坏的情况下,基本的动态设置操作需要O(lg n)时间。
请注意,空叶节点或父节点的颜色为黑色。
更多细节请参见麻省理工学院出版社©2001《算法简介》,第二版,第13章(1180页)
托马斯·H·科尔曼查尔斯·E·莱瑟森罗纳德·L·里维斯特克利福德·斯坦

ISBN:0262032937

 Rudolf Bayer

2 红黑树的算法

红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。
红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。 
它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。
 

3 源程序

using System;
using System.Collections;
using System.Collections.Generic;

using Legalsoft.Truffer.TTree;

namespace Legalsoft.Truffer.Algorithm
{
    public class RedBlack_Tree
    {
        private BinaryNode root { get; set; } = null;

	public void Insert(int v)
        {
            BinaryNode node = new BinaryNode(v);
            if (root == null)
            {
                root = node;
            }
            else
            {
                BinaryNode tempX = root;
                BinaryNode tempY = null;
                while (tempX != null)
                {
                    tempY = tempX;
                    tempX = v.CompareTo(tempX.Key) > 0 ? tempX.Right : tempX.Left;
                }
                if (v.CompareTo(tempY.Key) >= 0)
                {
                    tempY.Right = node;
                }
                else
                {
                    tempY.Left = node;
                }
            }
            // 修复
            Insert_Fixup(node);
        }

        /// <summary>
        /// 删除节点。
        /// 如果节点只有一个子节点或没有子节点,只需将其删除即可。
        /// 如果节点同时具有左和右子节点,请找到其后续节点,删除它并复制其子节点、
        /// 要删除的节点的值。
        /// 删除后,根据定义修复树。
        /// </summary>
        /// <param name="node"></param>
        public void Delete(BinaryNode node)
        {
            if (node == null)
            {
                return;
            }
            if ((node == root) && (root.Right == null) && (root.Left == null))
            {
                root = null;
                return;
            }

            BinaryNode tempX = null;
            BinaryNode tempY = null;
            if (node.Left == null || node.Right == null)
            {
                tempY

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/452508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程概念(2)

一、进程状态 Linux的进程状态实际上就是 struct task_struct 结构体中的一个变量 1.1状态汇总 其中&#xff0c;Linux 状态是用数组储存的&#xff0c;如下&#xff1a; static const char * const task_state_array[] { "R (running)", // 0 …

OceanBase4.2版本 Docker 体验

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

Unity开发中Partial 详细使用案例

文章目录 **1. 分割大型类****2. 与 Unity 自动生成代码协同工作****3. 团队协作****4. 共享通用逻辑****5. 自定义编辑器相关代码****6. 配合 Unity 的 ScriptableObjects 使用****7. 多人协作与版本控制系统友好** 在 Unity 开发中&#xff0c; partial 关键字是 C# 语言提供…

ChatGPT提问技巧——问题解答提示

ChatGPT提问技巧——问题解答提示 问题解答提示是一种允许模型生成回答特定问题或任务的文本的技术。要做到这一点&#xff0c;需要向模型提供一个问题或任务作为输入&#xff0c;以及与该问题或任务相关的任何附加信息。 一些提示示例及其公式如下&#xff1a; 示例 1&…

低代码开发平台-企业级可视化快速开发工具

一、你们是否也遇到了以下问题 &#xff08;1&#xff09;作为传统型的软件公司&#xff0c;你们是否也遇到以下困扰&#xff1a; &#xff08;2&#xff09;作为大型企业软件开发部&#xff0c;你们是否也遇到以下困扰&#xff1a; 二、低代码平台介绍 MSPF快速开发平台是一…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间的性能…

Elasticsearch使用Kibana进行基础操作

一、Restful接口 Elasticsearch通过RESTful接口提供与其进行交互的方式。在ES中&#xff0c;提供了功能丰富的RESTful API的操作&#xff0c;包括CRUD、创建索引、删除索引等操作。你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上&#xff0c;你甚至可以使用 curl …

国内新闻媒体排行,如何邀约媒体现场造势?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 国内新闻媒体排行可以根据多个维度进行&#xff0c;例如影响力、发行量、网站流量等。以下是一些常见的国内新闻媒体排名方式&#xff1a; 综合影响力排名&#xff1a;人民日报、新华社、…

RocketMQ 面试题及答案整理,最新面试题

RocketMQ的消息存储机制是如何设计的&#xff1f; RocketMQ消息存储机制的设计原理&#xff1a; 1、CommitLog文件&#xff1a; 所有的消息都存储在一个连续的CommitLog文件中&#xff0c;保证了消息的顺序写入&#xff0c;提高写入性能。 2、消费队列&#xff1a; 为每个主…

honle电源维修UV电源控制器维修EVG EPS60

好乐UV电源控制器维修&#xff1b;honle控制器维修&#xff1b;UV电源维修MUC-Steuermodul 2 LΛmpen D-82166 主要维修型号&#xff1a; EVG EPS 60/120、EVG EPS 100、EVG EPS200、EVG EPS 220、EVG EPS 340、EVG EPS40C-HMI、EVG EPS60 HONLE好乐uv电源维修故障包括&#…

理论学习 BatchNorm2d

import torch import torch.nn as nn# With Learnable Parameters m nn.BatchNorm2d(100) # Without Learnable Parameters m nn.BatchNorm2d(100, affineFalse) input torch.randn(20, 100, 35, 45) output m(input)print(output) print(output.shape)这段代码展示了如何使…

Unity制作马赛克效果

大家好&#xff0c;我是阿赵。   之前在玩怒之铁拳4里面&#xff0c;看到了马赛克场景转换的效果&#xff0c;觉得很有趣&#xff0c;于是也来做一下。 一、2D版本的马赛克转场效果 先看看视频效果&#xff1a; 马赛克转场 这里我是直接写shader实现的&#xff0c;我这里是把…

案例分析篇14:信息系统安全设计考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Unity WebGL服务器标头的问题

目录 现象&#xff1a; 报错文本: 原因: 解决方案: 现象&#xff1a; 打包前&#xff0c;ProjectSetting 压缩选项设置为Brotli, 将打包的WebGL部署到阿里云OSS环境后&#xff0c;运行弹框提示错误. 报错文本: Unable to parse Build/WebGL.framework.js.br! This canha…

凡得首席战略官蔡聪,将出席“ISIG-流程挖掘技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;RPA中国、AIGC开放社区、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索R…

【报错】File ‘xxx.ui‘ is not valid

Q: Pysider6中设计好的ui转py时&#xff0c;出现File ‘xxx.ui’ is not valid A&#xff1a; 重新配置外部工具 $FileName$ -o $FileNameWithoutExtension$.py $FileDir$

抢先了解:阿里巴巴面试必问!Spring设计思想解析

大家好,我是小米!今天,我要和大家一起探讨阿里巴巴面试中常见的一个热门话题:“Spring设计思想”!如果你也对这个话题感兴趣,那就跟着我一起来了解一下吧! IOC 控制反转 首先,我们来聊聊IOC 控制反转。在软件开发中,IOC(Inversion of Control)即控制反转,是一种重…

第42期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

【20240309】WORD宏设置批量修改全部表格格式

WORD宏设置批量修改全部表格格式 引言1. 设置表格文字样式2. 设置表格边框样式3. 设置所有表格边框样式为075pt4. 删除行参考 引言 这两周已经彻底变为office工程师了&#xff0c;更准确一点应该是Word工程师&#xff0c;一篇文档动不动就成百上千页&#xff0c;表格图片也是上…

php.exe运行时,提示缺少VCRUNTIME140.dll

php.exe运行时&#xff0c;提示缺少VCRUNTIME140.dll 下载地址 https://www.microsoft.com/zh-cn/download/details.aspx?id48145根据需要选择下载3.运行安装后&#xff0c;再次运行php.exe。