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

专业网站建设出售安徽百度关键词优化

专业网站建设出售,安徽百度关键词优化,大屏网站做响应,怎么做娱乐电玩网站目录 资源已上传 实现代码 测试代码 资源已上传 部分图片 实现代码 注意判断是否为红黑树的代码实现&#xff0c;实现代码中红黑树的删除 #pragma once #include<iostream> using namespace std;enum Color_Type {Red,Black };template<class K,class V> str…

目录

资源已上传

实现代码

测试代码


资源已上传

部分图片

实现代码

注意判断是否为红黑树的代码实现,实现代码中红黑树的删除

#pragma once
#include<iostream>
using namespace std;enum Color_Type
{Red,Black
};template<class K,class V>
struct RBTreeNode
{pair<K, V> _kv;RBTreeNode* _parent;RBTreeNode* _left;RBTreeNode* _right;Color_Type _color;RBTreeNode(const pair<K, V> kv): _kv(kv), _parent(nullptr), _left(nullptr), _right(nullptr), _color(Red){}};template<class K, class V>
class RBTree
{typedef RBTreeNode<K, V> Node;
private:Node* _root;
public:RBTree():_root(nullptr){}bool Insert(const pair<K, V>& kv){if (_root == nullptr){_root = new Node(kv);_root->_color = Black;return true;}Node* cur = _root;//指向当前节点的位置Node* parent = nullptr;//当前节点的父节点//找到插入位置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->_color = Red;if (cur->_kv.first < parent->_kv.first) {parent->_left = cur;cur->_parent = parent;}else{parent->_right = cur;cur->_parent = parent;}//父节点为红色,插入后还需做调整while (parent && parent->_color == Red){Node* grandfather = parent->_parent;if (parent == grandfather->_left){Node* uncle = grandfather->_right;if (uncle && uncle->_color == Red){// 变色parent->_color = uncle->_color = Black;grandfather->_color = Red;// 继续向上处理cur = grandfather;parent = cur->_parent;}else//uncle不存在或uncle为黑{if (cur == parent->_left){//	  g//	p//crotateR(grandfather);parent->_color = Black;grandfather->_color = Red;}else{//	g//p	//	crotateL(parent);rotateR(grandfather);cur->_color = Black;grandfather->_color = Red;}break;}}else{Node* uncle = grandfather->_left;// u存在且为红if (uncle && uncle->_color == Red){// 变色parent->_color = uncle->_color = Black;grandfather->_color = Red;// 继续向上处理cur = grandfather;parent = cur->_parent;}else{if (cur == parent->_right){// g//	  p//       crotateL(grandfather);grandfather->_color = Red;parent->_color = Black;}else{// g//	  p// crotateR(parent);rotateL(grandfather);cur->_color = Black;grandfather->_color = Red;}break;}}}_root->_color = Black;return true;}bool IsBalance(){return _IsBalance(_root);}int Height(){return _Height(_root);}bool checkColor(Node* root, int blacknum, int basenum){if (root == nullptr){if (blacknum != basenum){return false;}return true;}if (root->_color == Black){++blacknum;}if (root->_parent && root->_parent->_color == Red && root->_color == Red){cout << root->_kv.first << "出现连续红色节点" << endl;return false;}return  checkColor(root->_left, blacknum, basenum) && checkColor(root->_right, blacknum, basenum);}
private:void rotateL(Node* parent){Node* subR = parent->_right;Node* subRL = subR->_left;Node* pparent = parent->_parent;//1.建立subRL与parent之间的关系//左子树滑动parent->_right = subRL;if (subRL) {subRL->_parent = parent;}//2.建立subR和parent之间的关系//更新右子树的左子树subR->_left = parent;parent->_parent = subR;//3.建立pparent和subR之间的关系//与上一个节点建立连接if (parent == _root){_root = subR;subR->_parent == nullptr;}else{subR->_parent = pparent;if (parent = pparent->_left) {pparent->_left = subR;}else {pparent->_right = subR;}}}void rotateR(Node* parent){Node* subL = parent->_left;Node* subLR = subL->_right;Node* pparent = parent->_parent;//滑动parent->_left = subLR;if (subLR) {subLR->_parent = parent;}//更新左子树的右子树subL->_right = parent;parent->_parent = subL;if (parent == _root) {_root = subL;subL->_parent = nullptr;}else {subL->_parent == pparent;if (parent = pparent->_left) {pparent->_left = subL;}else {pparent->_right = subL;}}}int _Height(Node* root){if (!root) {return 0;}int left = _Height(root->_left);int right = _Height(root->_right);return left > right ? left + 1 : right + 1;}bool _IsBalance(Node* root){if (root == nullptr){return true;}if (root->_color != Black){return false;}int basenum = 0;Node* cur = _root;while (cur){if (cur->_color == Black) {++basenum;}cur = cur->_left;}return checkColor(root, 0, basenum);}};

测试代码

#include "RB_tree.h"
#include<vector>int main()
{const int N = 10;vector<int> v;v.reserve(N);srand(time(0));for (size_t i = 0; i < N; i++){v.push_back(i);}for (auto i : v){cout << i << " ";}cout << endl;RBTree<int, int> rbt;for (auto e : v){rbt.Insert(make_pair(e, e));cout << "Insert:" << e << endl;}cout << rbt.Height() << endl;if (rbt.IsBalance()){cout << "ok" << endl;}return 0;
}

http://www.hrbkazy.com/news/7274.html

相关文章:

  • 深圳外贸10强公司宁波seo关键词优化教程
  • 深圳大型商城网站建设企业网站优化公司
  • 无锡做网站公司哪家好企业文化
  • 小说网站 做百度联盟搜索引擎营销分析
  • 怎么样搭建wordpress河南网站建设优化技术
  • 东昌府做网站商品标题关键词优化
  • 企业做网站能赚钱么广州各区进一步强化
  • 深圳酒店网站建设百度提交入口
  • 小米发布会2023新品网站搜索引擎优化
  • 云南企业网站建设第三方平台推广引流
  • 北京中天人建设工程有限公司网站甘肃搜索引擎网络优化
  • 想做一个自己的网站怎么做的企业网站开发制作
  • 大连房地产网站开发最好的bt磁力搜索引擎
  • 如何做论坛网站营销页面
  • 厦门做外贸网站平原县网站seo优化排名
  • 整屏滚动网站百度文库首页官网
  • 毕设做网站 方面的论文新闻源
  • c 网站开发环境seo网络推广有哪些
  • 商城网站方案模板宁波seo外包平台
  • 房地产网站模版百度怎么推广广告
  • 装饰公司网站建设山西seo优化公司
  • 潍坊高新区建设局门户网站四川seo排名
  • 团购做的比较好的网站网站收录什么意思
  • 罗马尼亚网站后缀营销策略有哪些方面
  • 网站建设方案报价企业营销网站
  • 竞价网站做推广怎样宣传自己的产品
  • 标准版网站制作百度号码查询平台
  • 手机网站设计报告模板公司页面设计
  • 长沙seo网站优化网络营销的方式有几种
  • 濮阳网站建设0393seo免费打广告平台有哪些