平衡二叉查找树

红黑树-高级的二叉查找树

  1. 平衡树和非平衡树
  2. 红黑树特征:结点都有颜色,插入和删除结点时要遵循红黑规则;
  3. 红黑规则
    1. 每一个结点不是红色就是黑色;
    2. 跟总是黑色的;
    3. 如果结点时红色的,则它的子节点必须是黑色的;
    4. 从根到叶子结点的每条路径,必须包含相同的黑色结点。
  1. 修正方法
    1. 改变结点颜色
    2. 旋转
  2. C++函数库包含的红黑树
    1. #include<set>
    2. #include<map>
  1. C++实现红黑树,主要类如下
    1. Class RedBlackTree
    2. Class RedBlackNode
    3. NullNode
    4. Header
  2. 一个空的红黑树RedBlackTree.h
    #pragma once
    #ifndef RED_BLACKT_REE_H_
    #define RED_BLACKT_REE_H_//模板类声明
    template <class comparable>
    class RedBlackTree;
    template <class comparable>
    class RedBlackNode;//类定义
    template <class comparable>
    class RedBlackTree
    {	
    private:RedBlackNode<comparable> *header;    //红黑树头结点RedBlackNode<comparable> *nullNode;//空结点public:enum {RED,BLACK};									//枚举颜色,放在RedBlackTree类内部;RedBlackTree(const comparable& h);~RedBlackTree();
    };template <class comparable>
    class RedBlackNode
    {comparable element;RedBlackNode* left;RedBlackNode* right;int color;RedBlackNode(const comparable& ele=comparable(),//comparable类型是传递进来的类型,缺省参数赋初值是需要使用自己的类型,注意写法。RedBlackNode *l=NULL,RedBlackNode* r=NULL,int c=RedBlackTree<comparable>::BLACK): element(ele),left(l),right(r),color(c)                   //成员函数赋初值{}//友元类,RedBlackTree类可以方位RedBlackNode类的默认的private成员数据,注意在哪个类中声明友元friend class RedBlackTree<comparable>;	
    };
    #endif//类成员函数定义
    template<class comparable>
    RedBlackTree<comparable>::RedBlackTree(const comparable & h)
    {//new创建节点,存储指向根节点的指针,不存储其他数据nullNode = new RedBlackNode<comparable>();//使用缺省参数构造,nullNode->left = nullNode;nullNode->right = nullNode;//红黑树头指针,指向根节点,头指针也是一个结点,也需要使用new创建,只是其不存储数据,仅作存储根节点,用于指向根节点。header = new RedBlackNode<comparable>(h);header->left = nullNode;header->right = nullNode;
    }template<class comparable>
    inline RedBlackTree<comparable>::~RedBlackTree()
    {delete nullNode;delete header;
    }
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏的「隐藏身份」:AI与现实世界的「王牌训练师」

来源&#xff1a;雷锋网虚拟游戏对人工智能的物理性优势已经开始显现。「注&#xff1a;文章来自国际电信联盟&#xff08;ITU&#xff09;」当谈到新兴技术在改善世界各地人们生活的潜力时&#xff0c;你首先想到的可能不是电子游戏。然而&#xff0c;虚拟游戏可以在训练人工智…

Centos jdk

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载对应平台的jdk centos为jdk-8u201-linux-x64.tar.gz 服务器建立文件夹命名为jdk 把下载的jdk安装包传上去 tar zxvf jdk-8u201-linux-x64.tar.gz 解压缩 vim /etc/profile 在最下…

网页开发部署-开发工具MyEclips+Tomcat+mysql

一.相关软件 1.1 安装好MyEclipse后还需要进行如下配置。 Java JDKTomcatmysql https://pan.baidu.com/s/1GAV9TJhkZI8wiMpTteJi_w 提取码&#xff1a;wj32 1.2 Java JDK安装及配置&#xff0c;自定义安装&#xff0c;记住安装路径。 配置: 计算机------>属性------>高…

Hadoop的组成

一、Hadoop 1.x 和 2.x 的区别 二、HDFS架构 1&#xff09;NameNode&#xff08;nn&#xff09;&#xff1a;存储文件的元数据&#xff0c;如文件名&#xff0c;文件目录结构&#xff0c;文件属性&#xff08;生成时间、副本数、文件权限&#xff09;&#xff0c;以及每个文件…

深度学习与工业互联网安全:应用与挑战

来源&#xff1a;中国工程院院刊一、前言工业互联网是新一代信息技术与制造业深度融合的新兴工业生态与应用模式&#xff0c;通过“人、机、物”的泛在可靠互联&#xff0c;连接生产全要素、全产业链、全价值链&#xff0c;推动制造业生产方式和企业形态变革。工业互联网安全是…

Oracle 学习(1)

Oracle简介 Oracle是殷墟&#xff08;yīn Xu&#xff09;出土的甲骨文&#xff08;oracle bone inscriptions&#xff09;的英文翻译的第一个单词&#xff0c;在英语里是“神谕”的意思。Oracle公司成立于1977年&#xff0c;总部位于美国加州&#xff0c;是世界领先的信息管…

未来教育 · 软件破解

1、点击右侧链接&#xff0c;下载百度网盘 未来教育压缩包 [未来教育(提取码&#xff1a;hwx8)] 2、解压压缩包&#xff0c;安装软件 计算机等级考试模拟软件.exe (安装前务必打开网络)。 3、安装完成后&#xff0c;点击添加课程&#xff0c;选择自己需要的课程等级&#xff0…

网络攻防技术

&#xff11;.网络攻防 2.DDos具体攻击过程&#xff1a;拒绝服务攻击&#xff1b; 3.防护体系 防火墙:是位于两个(或多个)网络间&#xff0c;实施网间访问控制的一组组件的集合&#xff1b;IDS/IPS&#xff1a;VDS/VPS: 网络病毒检测系统VDS 是用于实时监测网络环境中病毒疫…

契约测试:解决微服务测试的问题

为什么是契约测试契约测试&#xff08;ContractTest&#xff09;第一次看到我是在Martin Fowler的文章里。&#xff08;原文在这里感兴趣的可以去看看https://martinfowler.com/bliki/ContractTest.html&#xff09; 在他的这篇文章了&#xff0c;首先说了一下TestDouble的劣势…

科普:不要对移动机器人有误解

来源&#xff1a;Allians联汇智造 作者&#xff1a;CSDN博主一、移动机器人介绍区别于AGV&#xff08;AutomaticGuided Vehicle&#xff0c;自动导引车&#xff0c;指装备有电磁或光学等自动引导设备&#xff0c;能按规定路径行走的自动运输车&#xff09;等自动化运输车&#…

Windows终止进程

进程终止的4种方法&#xff1a; 主线程从入口函数返回&#xff1b;进程中有个 线程调用ExitProcess函数&#xff1b;进程中所有线程结束&#xff1b;其他进程中的线程调用了TerminateProcess函数。 在此&#xff0c;通过TerminateProcess函数来终止一个个其他进程&#xff0c;我…

Linux命令整理 —— 目录结构

二 、vi 和 vim 编辑器 【写在前面】 云计算与分布式这门课程的实验都是在Linux下完成的&#xff0c;虽然之前也一直也学习过Linux&#xff0c;但是一直没有系统的过一遍。这周花了两天的时间看完了尚硅谷的Linux教程&#xff0c;在这里记录一下学习过程&#xff0c;也方便自己…

人工智能-机器学习之Selenium(chrome驱动,火狐驱动)

selenium是一个用于web应用程序测试的工具&#xff0c;Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括&#xff1a;测试与浏览器的兼容性——测试你的应用程序看是否能够…

这应该是史上最强的物理学科普(雄文)

图文来源&#xff1a;微信公众号&#xff1a;财经小报告本文素材主要摘录自加来道雄的《Hypersapce》和丘成桐的《The Shape of Inner Space》。作者希望凭籍本文&#xff0c;回顾一下两百年来的科学史&#xff0c;看看那些代表着人类最高心智的数学家、物理学家们前仆后继探究…

3D模型格式解析(OBJ)

文章目录OBJ格式解析一、OBJ格式二、vtkOBJReader源码解析1.主要部分总结OBJ格式解析 通过解读vtk源码中对OBJ文件的读取代码&#xff0c;讲解如何获取obj模型的顶点(vertex)信息&#xff0c;法线信息&#xff0c;纹理信息以及点(Point)、线、面等主要元素的提取。 一、OBJ格式…

《动手学深度学习》第一天 (2.1+2.2)

2.1 获取和运行本书的代码 2.1.1获取代码并安装运行环境 第一步&#xff1a; 安装Miniconda &#xff0c;由于我的电脑已经安装过Anaconda&#xff0c;所以就没有再安装Miniconda了。 第二步&#xff1a;下载代码&#xff0c;地址 https://zh.d2l.ai/d2l-zh-1.0.zip 第三步…

从技术到科学,中国AI向何处去?

来源&#xff1a; 科学网编辑&#xff1a;宗华排版&#xff1a;华园作者&#xff1a;金榕&#xff08;阿里巴巴达摩院副院长、原密歇根州立大学终身教授&#xff09;● AI时代序幕刚拉开&#xff0c;AI目前还处于初级阶段&#xff0c;犹如法拉第刚刚发现了交流电&#xff0c;还…

QT高级编程之基本函数用法

1.QString类函数介绍 toInt()函数&#xff0c;可以将整型按照不同进制转换为QString对象&#xff1b;number()函数&#xff0c;可以将QString对象转换为不同进制的数字&#xff1b; 2.文档查询方法&#xff1a;通过Qt Creator编辑器通过帮助->索引->QString查看QString…

Linux命令整理 —— vi 和 vim 编辑器

一、目录结构 二 、vim 和 vim 编辑器 2.1【基本介绍】 所有的 Linux 系统都会内建 vi 文本编辑器。 vim 具有程序编辑的能力&#xff0c;可以看做是 vi 的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。代码补完、编译及错误跳转等方…