news 2026/5/12 5:13:58

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/5/6 16:42:05

快速上手指南:5分钟掌握ffmpeg-python视频处理核心技术

快速上手指南&#xff1a;5分钟掌握ffmpeg-python视频处理核心技术 【免费下载链接】ffmpeg-python Python bindings for FFmpeg - with complex filtering support 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpeg-python ffmpeg-python是强大的FFmpeg Python绑定…

作者头像 李华
网站建设 2026/5/11 13:24:00

TensorNetwork终极指南:快速掌握MERA算法实战与性能优化

TensorNetwork终极指南&#xff1a;快速掌握MERA算法实战与性能优化 【免费下载链接】TensorNetwork A library for easy and efficient manipulation of tensor networks. 项目地址: https://gitcode.com/gh_mirrors/te/TensorNetwork 你是否在量子多体系统模拟中遭遇计…

作者头像 李华
网站建设 2026/5/9 4:25:17

OpenVoice语音克隆终极指南:5分钟快速上手免费神器

OpenVoice语音克隆终极指南&#xff1a;5分钟快速上手免费神器 【免费下载链接】OpenVoice 项目是MyShell AI开源的即时语音克隆技术OpenVoice&#xff0c;旨在提供一种能够快速从少量语音样本中准确复制人类声音特征&#xff0c;并实现多种语言及语音风格转换的解决方案。 项…

作者头像 李华
网站建设 2026/5/11 16:18:09

OrcaSlicer智能分层技术:让3D打印告别“选择困难症“

OrcaSlicer智能分层技术&#xff1a;让3D打印告别"选择困难症" 【免费下载链接】OrcaSlicer G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.) 项目地址: https://gitcode.com/GitHub_Trending/orc/OrcaSlicer 还在为…

作者头像 李华
网站建设 2026/5/10 4:08:58

Universal G-Code Sender 终极故障排查指南

Universal G-Code Sender 终极故障排查指南 【免费下载链接】Universal-G-Code-Sender A cross-platform G-Code sender for GRBL, Smoothieware, TinyG and G2core. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-G-Code-Sender Universal G-Code Sender&…

作者头像 李华
网站建设 2026/5/7 10:31:04

终极AI设计指南:5分钟生成专业UI原型的开源神器

终极AI设计指南&#xff1a;5分钟生成专业UI原型的开源神器 【免费下载链接】superdesign 项目地址: https://gitcode.com/gh_mirrors/su/superdesign 在当今快速迭代的开发环境中&#xff0c;您是否经常面临这样的困境&#xff1a;设计想法难以快速落地&#xff0c;原…

作者头像 李华