莱芜摩托车网站网站做扫一扫

张小明 2026/1/10 8:52:30
莱芜摩托车网站,网站做扫一扫,十大装修公司排名哪家最好,舆情网站入口网址大全名字双旋:8左边分给6右边#xff0c;8右边给10左边#xff0c;8作为根。这样才能单旋这种不行#xff0c;这还分单旋双旋问题#xff0c;单旋情况#xff0c;g变成黑#xff0c;不需要往上处理#xff0c;黑色上面红黑都行直接break#xff1b;else 就是复刻一下#xff0…双旋:8左边分给6右边8右边给10左边8作为根。这样才能单旋这种不行这还分单旋双旋问题单旋情况g变成黑不需要往上处理黑色上面红黑都行直接breakelse 就是复刻一下换一下方向。模版是类型的复用继承是实现的复用逻辑类似类型不同搞成模版实现继承设置基类派生类继承。#pragma once enum Colour { RED, BLACK }; templateclass K, class V struct RBTreeNode { // 这里更新控制平衡也要加入parent指针 pairK, V _kv; RBTreeNodeK, V* _left; RBTreeNodeK, V* _right; RBTreeNodeK, V* _parent; Colour _col; RBTreeNode(const pairK, V kv) :_kv(kv) , _left(nullptr) , _right(nullptr) , _parent(nullptr) {} }; templateclass K, class V class RBTree { typedef RBTreeNodeK, V Node; public: bool Insert(const pairK, 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 { if (cur parent-_left) { // g // p u // c RotateR(grandfather); parent-_col BLACK; grandfather-_col RED; } else { // g // p u // c RotateL(parent); RotateR(grandfather); cur-_col BLACK; grandfather-_col RED; } break; } } else { // g // u p Node* uncle grandfather-_left; // 叔叔存在且为红-》变色即可 if (uncle uncle-_col RED) { parent-_col uncle-_col BLACK; grandfather-_col RED; // 继续往上处理 cur grandfather; parent cur-_parent; } else // 叔叔不存在或者存在且为黑 { // 情况二叔叔不存在或者存在且为黑 // 旋转变色 // g // u p // c if (cur parent-_right) { RotateL(grandfather); parent-_col BLACK; grandfather-_col RED; } else { RotateR(parent); RotateL(grandfather); cur-_col BLACK; grandfather-_col RED; } break; } } } _root-_col BLACK; return true; } void RotateR(Node * parent) { Node* subL parent-_left; Node* subLR subL-_right; parent-_left subLR; if (subLR) subLR-_parent parent; Node* pParent parent-_parent; subL-_right parent; parent-_parent subL; if (parent _root) { _root subL; subL-_parent nullptr; } else { if (pParent-_left parent) { pParent-_left subL; } else { pParent-_right subL; } subL-_parent pParent; } } void RotateL(Node * parent) { Node* subR parent-_right; Node* subRL subR-_left; parent-_right subRL; if (subRL) subRL-_parent parent; Node* parentParent parent-_parent; subR-_left parent; parent-_parent subR; if (parentParent nullptr) { _root subR; subR-_parent nullptr; } else { if (parent parentParent-_left) { parentParent-_left subR; } else { parentParent-_right subR; } subR-_parent parentParent; } } void InOrder() { _InOrder(_root); cout endl; } int Height() { return _Height(_root); } int Size() { return _Size(_root); } Node* Find(const K key) { Node* cur _root; while (cur) { if (cur-_kv.first key) { cur cur-_right; } else if (cur-_kv.first key) { cur cur-_left; } else { return cur; } } return nullptr; } bool IsBalance() { if (_root nullptr) return true; if (_root-_col RED) return false; // 参考值 int refNum 0; Node* cur _root; while (cur) { if (cur-_col BLACK) { refNum; } cur cur-_left; } return Check(_root, 0, refNum); } private: bool Check(Node* root, int blackNum, const int refNum) { if (root nullptr) { // 前序遍历走到空时意味着一条路径走完了 //cout blackNum endl; if (refNum ! blackNum) { cout 存在黑色结点的数量不相等的路径 endl; return false; } return true; } // 检查孩子不太方便因为孩子有两个且不一定存在反过来检查父亲就方便多了 if (root-_col RED root-_parent-_col RED) { cout root-_kv.first 存在连续的红色结点 endl; return false; } if (root-_col BLACK) { blackNum; } return Check(root-_left, blackNum, refNum) Check(root-_right, blackNum, refNum); } void _InOrder(Node* root) { if (root nullptr) { return; } _InOrder(root-_left); cout root-_kv.first : root-_kv.second endl; _InOrder(root-_right); } int _Height(Node* root) { if (root nullptr) return 0; int leftHeight _Height(root-_left); int rightHeight _Height(root-_right); return leftHeight rightHeight ? leftHeight 1 : rightHeight 1; } int _Size(Node* root) { if (root nullptr) return 0; return _Size(root-_left) _Size(root-_right) 1; } private: Node* _root nullptr; };#define _CRT_SECURE_NO_WARNINGS 1 #includeiostream using namespace std; #includeRBTree.h void TestRBTree1() { RBTreeint, int t; // 常规的测试用例 //int a[] { 16, 3, 7, 11, 9, 26, 18, 14, 15 }; // 特殊的带有双旋场景的测试用例 int a[] { 4, 2, 6, 1, 3, 5, 15, 7, 16, 14 }; for (auto e : a) { t.Insert({ e, e }); } t.InOrder(); cout t.IsBalance() endl; } int main() { TestRBTree1(); return 0; }基本编过了怎么判平衡第一点不用检查用的枚举第二点直接检查就行第三点第四点怎么检查检查孩子要检查两个还不一定存在我检查父亲就很方便父亲一定存在。跟是黑色形参下一层 不影响上一层怎么比较路径方式一给个容器遍历容器比较每个值或者跟个基准值进行比较跟某一条路径进行比较
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站后缀pw创建一个企业网站流程的步骤

Bodymovin插件5大核心技术解密:从AE动画到跨平台部署的完整链路 【免费下载链接】bodymovin-extension Bodymovin UI extension panel 项目地址: https://gitcode.com/gh_mirrors/bod/bodymovin-extension 在数字创意与工程实现之间,是否存在一座…

张小明 2026/1/5 21:18:53 网站建设

平面设计师看的网站5118营销大数据

终极轻量级MP3解码方案:minimp3完整指南 【免费下载链接】minimp3 Minimalistic MP3 decoder single header library 项目地址: https://gitcode.com/gh_mirrors/mi/minimp3 在当今数字音频处理领域,寻找一个既高效又轻量的MP3解码库是许多开发者…

张小明 2026/1/9 17:46:12 网站建设

公司网站用什么开发个人网站开发总结文档

OptiScaler图形优化引擎:跨平台超分辨率技术深度解析 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 你是否曾在游戏中…

张小明 2026/1/2 14:14:17 网站建设

昆明建设工程质量备案在哪个网站wordpress静态化好处

还在为B站视频无法离线观看而烦恼吗?DownKyi作为专业的B站视频下载工具,为你提供从基础到进阶的完整使用方案。无论你是想收藏珍贵视频还是制作学习资料,这款开源工具都能满足你的各种需求。 【免费下载链接】downkyi 哔哩下载姬downkyi&…

张小明 2025/12/31 2:08:06 网站建设

网站的服务器怎么做的什么网站可以做试卷

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个完整的效率对比demo:1.左侧面板展示传统手动解决iframe跨域的10个步骤代码 2.右侧面板展示AI一键生成的等效解决方案 3.包含性能对比指标 4.添加可交互的对比…

张小明 2026/1/9 12:59:49 网站建设

品牌网站设计首选python在线编程翻译器

Linux调度器调优指南:5个关键配置提升系统性能 【免费下载链接】linux Linux kernel source tree 项目地址: https://gitcode.com/GitHub_Trending/li/linux Linux内核调度器作为系统的核心组件,负责合理分配CPU资源给各个进程和线程。通过优化sc…

张小明 2025/12/28 20:38:59 网站建设