news 2026/4/16 10:41:14

27.红黑树(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
27.红黑树(上)

从根节点走到空算一条路径,这个有9条路径。最短最长不一定存在。

插入相同节点,avl高度更低,左右很均衡,红黑树不那么均衡,但效率不差,最短路径把他切开,就是满二叉树

avl树比红黑树更接近logN,红黑树比logN多一点,CPU很快没什么差别

h不为0,旋转加变色

变色+继续往上处理,变色要让这棵树之前是一个节点现在还是一个节点,向上处理就是爷爷节点变成红的红的,如果父亲也是红的,连续的红节点,继续处理。

#pragma once enum Colour { RED, BLACK }; template<class K, class V> struct RBTreeNode { // 这里更新控制平衡也要加入parent指针 pair<K, V> _kv; RBTreeNode<K, V>* _left; RBTreeNode<K, V>* _right; RBTreeNode<K, V>* _parent; Colour _col; RBTreeNode(const pair<K, V>& kv) :_kv(kv) , _left(nullptr) , _right(nullptr) , _parent(nullptr) {} }; template<class K, class V> class RBTree { typedef RBTreeNode<K, V> Node; public: bool Insert(const pair<K, V>& kv) { if (_root == nullptr) { _root = new Node(kv); _root->_col = BLACK; return true; } Node* parent = nullptr; Node* cur = _root; while (cur) { if (cur->_kv.first < kv.first) { parent = cur; cur = cur->_right; } else if (cur->_kv.first > kv.first) { parent = cur; cur = cur->_left; } else { return false; } } cur = new Node(kv); cur->_col = RED; if (parent->_kv.first < kv.first) { parent->_right = cur; } else { parent->_left = cur; } // 链接父亲 cur->_parent = parent; // 父亲是红色,出现连续的红色节点,需要处理 while (parent && parent->_col == RED) { Node* grandfather = parent->_parent; if (parent == grandfather->_left) { // g // p u Node* uncle = grandfather->_right; if (uncle && uncle->_col == RED) { // 变色 parent->_col = uncle->_col = BLACK; grandfather->_col = RED; // 继续往上处理 cur = grandfather; parent = cur->_parent; } } else { // g // u p Node* uncle = grandfather->_left; // 叔叔存在且为红,-》变色即可 } } _root->_col = BLACK; return true; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:15:47

8位RISC CPU的Verilog实现:从架构设计到硬件验证

8位RISC CPU的Verilog实现&#xff1a;从架构设计到硬件验证 【免费下载链接】8-bits-RISC-CPU-Verilog Architecture and Verilog Implementation of 8-bits RISC CPU based on FSM. 基于有限状态机的8位RISC&#xff08;精简指令集&#xff09;CPU&#xff08;中央处理器&…

作者头像 李华
网站建设 2026/4/12 16:43:01

Android视频自动播放终极指南:快速集成AutoplayVideos库

Android视频自动播放终极指南&#xff1a;快速集成AutoplayVideos库 【免费下载链接】AutoplayVideos Android library to auto-play/pause videos from url in recyclerview. 项目地址: https://gitcode.com/gh_mirrors/au/AutoplayVideos 在现代移动应用中&#xff0c…

作者头像 李华
网站建设 2026/4/16 9:18:41

AxGlyph矢量绘图软件完全指南:轻松创建专业级插图

AxGlyph矢量绘图软件完全指南&#xff1a;轻松创建专业级插图 【免费下载链接】AxGlyphv12.25免费安装版-矢量图绘制软件 AxGlyph 是一款功能强大的矢量图绘制软件&#xff0c;适用于插图、曲线图标、流程图等多种矢量图的绘制。软件支持中文界面&#xff0c;操作简单易上手&am…

作者头像 李华
网站建设 2026/4/16 9:20:23

新一代鸿蒙电脑发布,企业办公迈向“鸿蒙化”时代!

华为鸿蒙pc操作系统 12月11日&#xff0c;华为举办鸿蒙办公产业峰会&#xff0c;标志着鸿蒙生态正式完成从“消费级”到“商用级”的战略跨越&#xff0c;进入规模化商用的新阶段。峰会期间&#xff0c;华为正式推出了为企业而生的鸿蒙电脑企业版以及新一代鸿蒙电脑——华为擎云…

作者头像 李华
网站建设 2026/4/15 16:43:39

Unity Asset Usage Detector终极指南:快速掌握资产引用检测

Unity Asset Usage Detector终极指南&#xff1a;快速掌握资产引用检测 【免费下载链接】UnityAssetUsageDetector Find usages of the selected asset(s) and/or Object(s) in your Unity project, i.e. list the objects that refer to them 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/4/15 22:06:32

ImageSharp像素操作深度解析:5个关键技巧提升图像处理性能

ImageSharp像素操作深度解析&#xff1a;5个关键技巧提升图像处理性能 【免费下载链接】ImageSharp :camera: A modern, cross-platform, 2D Graphics library for .NET 项目地址: https://gitcode.com/gh_mirrors/im/ImageSharp 在当今的.NET图像处理领域&#xff0c;I…

作者头像 李华