C++ 实现:简单红黑树管理系统(含插入、删除、查找操作)
以下是一个使用 C++ 实现的简单红黑树管理系统的示例代码,包括插入、删除和查找操作: ```cpp #include <iostream> // 红黑树节点结构体 struct RBTreeNode { int data; bool isRed; RBTreeNode* left; RBTreeNode* right; RBTreeNode* parent; RBTreeNode(int val) : data(val), isRed(true), left(nullptr), right(nullptr), parent(nullptr) {} }; // 左旋操作 void leftRotate(RBTreeNode* &root, RBTreeNode* x) { RBTreeNode* y = x->right; x->right = y->left; if (y->left!= nullptr) { y->left->parent = x; } y->parent = x->parent; if (x->parent == nullptr) { root = y; } else if (x == x->parent->left) { x->parent->left = y; } else { x->parent->right = y; } y->left = x; x->parent = y; } // 右旋操作 void rightRotate(RBTreeNode* &root, RBTreeNode* y) { RBTreeNode* x = y->left; y->left = x->right; if (x->right!= nullptr) { x->right->parent = y; } x->parent = y->parent; if (y->parent == nullptr) { root = x; } else if (y == y->parent->right) { y->parent->right = x; } else { y->parent->left = x; } x->right = y; y->parent = x; } // 修复插入操作后的红黑树性质 void fixInsert(RBTreeNode* &root, RBTreeNode* z) { while (z!= root && z->parent->isRed) { if (z->parent == z->parent->parent->left) { RBTreeNode* y = z->parent->parent->right; if (y!= nullptr && y->isRed) { z->parent->isRed = false; y->isRed = false; z->parent->parent->isRed = true; z = z->parent->parent; } else { if (z == z->parent->right) { z = z->parent; leftRotate(root, z); } z->parent->isRed = false; z->parent->parent->isRed = true; rightRotate(root, z->parent->parent); } } else { RBTreeNode* y = z->parent->parent->left; if (y!= nullptr && y->isRed) { z->parent->isRed = false; y->isRed = false; z->parent->parent->isRed = true; z = z->parent->parent; } else { if (z == z->parent->left) { z = z->parent; rightRotate(root, z); } z->parent->isRed = false; z->parent->parent->isRed = true; leftRotate(root, z->parent->parent); } } } root->isRed = false; } // 插入节点 void insert(RBTreeNode* &root, int val) { RBTreeNode* z = new RBTreeNode(val); RBTreeNode* y = nullptr; RBTreeNode* x = root; while (x!= nullptr) { y = x; if (z->data < x->data) { x = x->left; } else { x = x->right; } } z->parent = y; if (y == nullptr) { root = z; } else if (z->data < y->data) { y->left = z; } else { y->right = z; } fixInsert(root, z); } // 中序遍历 void inorderTraversal(RBTreeNode* root) { if (root!= nullptr) { inorderTraversal(root->left); std::cout << root->data << " "; inorderTraversal(root->right); } } // 查找节点 RBTreeNode* search(RBTreeNode* root, int val) { if (root == nullptr || root->data == val) { return root; } if (val < root->data) { return search(root->left, val); } else { return search(root->right, val); } } // 测试示例 int main() { RBTreeNode* root = nullptr; insert(root, 10); insert(root, 20); insert(root, 30); insert(root, 5); insert(root, 15); std::cout << "Inorder Traversal: "; inorderTraversal(root); std::cout << std::endl; int searchVal = 15; RBTreeNode* foundNode = search(root, searchVal); if (foundNode!= nullptr) { std::cout << searchVal << " found in the tree." << std::endl; } else { std::cout << searchVal << " not found in the tree." << std::endl; } return 0; } ``` 这只是一个简单的红黑树管理系统的示例,实际的红黑树实现可能会更加复杂,需要处理更多的边界情况和优化。 ######[AI写代码神器 | 1345点数解答 | 2024-08-22 15:49:33]
- Java顺序表源码深度解析:从内存布局到扩容机制与Windows实战指南(阿里通义 | 2528点数解答 | 2026-04-01 10:06:46)23
- Python实现Q老师成绩管理任务:修改与查看学生成绩(字节豆包 | 191点数解答 | 2025-12-20 20:55:41)100
- Python 代码助力 Q 老师高效管理班级学生成绩:修改与查看一键搞定(字节豆包 | 326点数解答 | 2025-12-27 20:48:12)104
- C++实现顺序存储结构基本操作:初始化、插入、删除等全解析(GPT | 1743点数解答 | 2024-09-26 00:20:17)296
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)371
- 工程师必备!10 种工程日常易用管理工具大揭秘(百度文心 | 346点数解答 | 2023-11-09 18:26:09)305
- C 语言实现单链表全功能操作:创建、增删查改与逆置测试( | 4796点数解答 | 2024-03-28 16:24:20)351
- C++实现单循环链表:初始化、插入、删除等操作及测试验证(GPT | 2102点数解答 | 2024-10-13 13:39:58)166
- Java 实现通用文件存储系统:含随机读写与空闲空间回收(字节豆包 | 686点数解答 | 2024-11-21 16:25:51)238
- C语言实现多班级学生信息管理系统:含增删改查与多样排序功能(GPT | 2547点数解答 | 2024-12-15 22:08:58)371
- C语言实现学生信息管理系统:含增删改查与多种排序功能(GPT | 6408点数解答 | 2024-12-15 22:10:03)367
- 基于商品效期规则的本地网页管理系统,无需服务器和网络,单HTML文件本地浏览器运行。 商品效期规则: 保质期≥12个月:临期提醒提前45天,下架提前5天(含过期提醒) 6个月≤保质期<12个月:临期提醒提前20天,下架提前3天(含过期提醒) 3个月≤保质期<6个月:临期提醒提前15天,下架提前3天(含过期提醒) 30天≤保质期<3个月:临期提醒提前10天,下架提前3天(含过期提醒) 15天≤保质期<30天:临期提醒提前5天,下架提前3天(含过期提醒) 保质期≤15天:临期提醒提前3天,下架提前2天(含过期提醒) 一定要遵守上门这个规则,状态以上位置,需要一一对应。 严格遵循 6 级保质期规则 → 自动计算「临期/下架/过期」状态(绿/黄/红) 产品管理模块: 商品列表展示:序号、名称、类别、生产日期、保质期、到期日、剩余天数(带单位)、状态(正常/临期/下架(一定要注意,选择类型要根据选择显示),对应绿/黄/红颜色)、操作(编辑、删除、备注),默认按照后添加先排,还需要根据一些条件,比如剩余天数可以筛选排序。 功能:添加商品(弹窗形式,保质期仅支持"XX天"或"XX月"格式)(讯飞星火 | 2053点数解答 | 2026-04-01 23:04:48)27