当前位置: 首页 > news >正文

C++伸展树与红黑树实现详解

好的,我将为你详细讲解C++中的伸展树和红黑树的实现原理与代码示例。


伸展树(Splay Tree)

伸展树是一种自适应二叉搜索树,通过伸展操作(splaying)将最近访问的节点移动到根节点附近,从而提升后续访问效率。其核心操作包括旋转(zig, zag, zig-zig等),均摊时间复杂度为 $O(\log n)$。

基本操作
  1. 查找:找到目标节点后执行伸展操作。
  2. 插入:插入新节点后执行伸展。
  3. 删除:将待删除节点伸展至根,删除后合并子树。
C++ 节点定义
struct SplayNode { int key; SplayNode *left, *right; };
伸展操作示例
SplayNode* splay(SplayNode* root, int key) { if (!root || root->key == key) return root; if (key < root->key) { // 左子树处理(示例为zig操作) if (!root->left) return root; if (key < root->left->key) { // zig-zig root->left->left = splay(root->left->left, key); root = rotateRight(root); // 右旋 } // 其他旋转情况... } // 对称处理右子树 return root; }

红黑树(Red-Black Tree)

红黑树是一种自平衡二叉搜索树,通过颜色标记和旋转操作维持近似平衡,确保操作时间复杂度为 $O(\log n)$。需满足以下性质:

  1. 节点为红或黑。
  2. 根节点为黑。
  3. 叶节点(NIL)为黑。
  4. 红节点的子节点必为黑。
  5. 从任一节点到叶节点的路径包含相同数量黑节点。
C++ 节点定义
enum Color { RED, BLACK }; struct RBNode { int key; Color color; RBNode *left, *right, *parent; };
插入修复(双红冲突处理)
void fixInsert(RBTree* tree, RBNode* node) { while (node->parent && node->parent->color == RED) { RBNode* uncle = getUncle(node); // 获取叔节点 if (uncle && uncle->color == RED) { // Case 1: 叔节点为红 recolor(node); } else { // Case 2 & 3: 叔节点为黑,需旋转 if (isLeftChild(node) != isLeftChild(node->parent)) { rotate(node); // 折线型先旋转父节点 } rotate(node->parent); // 再旋转祖父节点 swapColors(node->parent, node->parent->parent); } } tree->root->color = BLACK; // 根节点始终为黑 }
完整红黑树实现框架
class RedBlackTree { private: RBNode* root; RBNode* insertHelper(RBNode* root, RBNode* node); void fixViolation(RBNode* node); // 旋转函数:leftRotate, rightRotate public: void insert(int key); void delete(int key); };

http://my.tv.sohu.com/us/442516649/709692713.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjcxMy5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692478.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjQ3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692724.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjcyNC5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692570.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjU3MC5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692500.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjUwMC5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692657.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjY1Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692661.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjY2MS5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692740.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5Mjc0MC5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692836.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5MjgzNi5zaHRtbA==.html
http://my.tv.sohu.com/us/442516649/709692847.shtml
https://tv.sohu.com/v/dXMvNDQyNTE2NjQ5LzcwOTY5Mjg0Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709691878.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MTg3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709691887.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MTg4Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709692069.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MjA2OS5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709691897.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MTg5Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709692081.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MjA4MS5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709692139.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MjEzOS5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709692149.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MjE0OS5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709691993.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MTk5My5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709691998.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MTk5OC5zaHRtbA==.html
http://my.tv.sohu.com/us/443346928/709692234.shtml
https://tv.sohu.com/v/dXMvNDQzMzQ2OTI4LzcwOTY5MjIzNC5zaHRtbA==.html


对比总结

特性伸展树红黑树
平衡方式访问时自适应伸展颜色约束 + 旋转
时间复杂度均摊 $O(\log n)$严格 $O(\log n)$
适用场景局部性强的访问(如缓存)稳定性能需求(如STL map)

红黑树是C++ STL中std::mapstd::set的底层实现,其稳定性更适合工业级应用。

如果需要完整代码实现或进一步优化细节,请随时告知!

http://www.jsqmd.com/news/610857/

相关文章:

  • 【Cuvil编译器实战指南】:Python AI推理性能提升300%的5步精准配置法
  • Snaffler实战技巧:5个真实场景下的高级配置与优化策略
  • RTCMultiConnection安全机制详解:保护你的实时通信数据
  • vuejs-datepicker高亮日期完全指南:打造智能日历体验
  • 终极LiquidPrompt系统监控指南:实时掌握CPU、内存、电池状态的10个实用技巧
  • OPC UA在C#工业项目中为何频繁断连?3步诊断法+7行核心代码速修方案
  • 2026年不锈钢光圆品牌有哪些,不锈钢六角棒/锻棒/不锈钢方棒/不锈钢黑棒/不锈钢光圆,不锈钢光圆厂商哪家好 - 品牌推荐师
  • iOS 上架4.3a 审核4.3a 被拒4.3a 【灾难来袭】
  • 终极write-good CLI指南:10个快速提升英语写作质量的命令行技巧
  • 杰理之设备升级功能【篇】
  • 4G5G专题-85: 架构 - 5G NR空中接口与协议栈演进
  • 【HBuildX】uniapp安卓打包全流程解析:从配置到上架
  • -:RAG 入门-向量存储与企业级向量数据库 milvus腺
  • Mac开发者必备:OpenClaw+Phi-3-vision-128k-instruct自动化开发环境搭建
  • 2026年电镀旅行真空瓶/乳液真空瓶横向对比厂家推荐 - 行业平台推荐
  • ExcelCPU安全指南:在电子表格中运行代码的5大风险与防护策略
  • Tessent ATPG实战避坑:从Stuck-at到Transition Delay测试,我的向量生成与验证全流程
  • 2026年口碑好的防窜货系统/产品防伪防窜货系统优质供应商推荐 - 行业平台推荐
  • 终极指南:crawler4j数据清洗与预处理 - 在爬取过程中实现高效数据质量管控
  • 杰理之spdif 信息位给过来的采样率信息不正确兼容性问题处理【篇】
  • ArcGIS Pro 3.0 遥感影像植被覆盖度计算全流程(附Python脚本)
  • OpenClaw+百川2-13B量化模型:个人知识库自动整理实战指南
  • 【2025最新】基于SpringBoot+Vue的web音乐网站管理系统源码+MyBatis+MySQL
  • GTE+SeqGPT效果展示:用户提问‘Python怎么读取Excel’→匹配‘pandas read_excel’知识条目
  • 避免踩坑:PowerShell批量修改注册表时如何确保安全(含日志记录功能)
  • 别再手动复制SSH公钥了,Linux服务器一键从GitHub快速导入公钥闯
  • HelloWord-Keyboard固件编程完全指南:从零掌握机械键盘定制开发
  • Go 限流器性能优化终极指南:避免缓存伪共享的 padding 策略
  • 从手机到汽车:一颗LDO芯片要过多少“酷刑”?聊聊AEC-Q100车规测试与热失控预防
  • 如何快速掌握Notepad--:跨平台国产文本编辑器的完整指南