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

小程序流量主骗局抖音优化

小程序流量主骗局,抖音优化,腾云网,wordpress academy主题文章目录 前言一、红黑树的插入操作1.红黑树结点的定义2.红黑树的插入1.uncle存在且为红2.uncle不存在3.uncle存在且为黑 3.完整代码 二、是否为红黑树的验证1.IsBlance函数2.CheckColor函数 三、红黑树与AVL树的比较 前言 红黑树,是一种二叉搜索树,但在…

文章目录

  • 前言
  • 一、红黑树的插入操作
    • 1.红黑树结点的定义
    • 2.红黑树的插入
      • 1.uncle存在且为红
      • 2.uncle不存在
      • 3.uncle存在且为黑
    • 3.完整代码
  • 二、是否为红黑树的验证
    • 1.IsBlance函数
    • 2.CheckColor函数
  • 三、红黑树与AVL树的比较


前言

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的

红黑树的性质:

  1. 每个结点不是红色就是黑色
  2. 根节点是黑色的
  3. 如果一个节点是红色的,则它的两个孩子结点是黑色的
  4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点 (每条路径上的黑色结点数量相同)
  5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)
    在这里插入图片描述
    最短路径:全部都是黑节点的路径。
    最长路径:一黑一红相间的路径

一、红黑树的插入操作

1.红黑树结点的定义

enum Color {RED,BLACK
};
template<class K,class V>
struct RBTreeNode {RBTreeNode* _left;RBTreeNode* _right;RBTreeNode* _parent;pair<K, V>_kv;Color _col;//颜色RBTreeNode(const pair<K,V>&kv):_left(nullptr),_right(nullptr),_parent(nullptr),_kv(kv),_col(RED)//结点默认给成红色是为了方便后续的插入//因为默认为黑色的话还需要考虑所有路径上黑色结点数量是否相同//太麻烦了{}
};

2.红黑树的插入

插入分为一下三种情况,因为我们插入的结点默认为红色,而红黑树定义中指出不能出现连续的两个红色结点,为了维持红黑树,我们需要对一些结点的颜色进行改变有时还需要旋转改变树的形状,至于有关旋转的函数Rotate,我已经在之前AVL树的模拟实现中详细说明了,这里就不多在赘述了【C++】AVL树的插入操作实现以及验证是否正确(带平衡因子),有需要的可以去看一下。

1.uncle存在且为红

这种情况就不需要考虑旋转了
在这里插入图片描述
在这里插入图片描述

2.uncle不存在

在这里插入图片描述

3.uncle存在且为黑

在这里插入图片描述
在这里插入图片描述

总结:
红黑树插入关键看uncle
1.uncle存在且为红,变色(uncle与parent变黑色,grandfather变红色),之后继续向上处理
2.uncle不存在或者uncle存在且为黑,旋转加变色,之后break
3.小规律:grandfather在这个过程中要不本来就为红色,要不就变成红色

3.完整代码

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* 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->_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) {Node* uncle = grandfather->_right;if (uncle && uncle->_col == RED) {//uncle存在且为红parent->_col = uncle->_col = BLACK;grandfather->_col = RED;//继续向上更新cur = grandfather;parent = cur->_parent;}else {//uncle不存在或者uncle为黑if (cur == parent->_left) {//     g//   p// cRotateR(grandfather);grandfather->_col = RED;parent->_col = BLACK;}else {//     g//   p//		cRotateL(parent);RotateR(grandfather);cur->_col = BLACK;grandfather->_col = RED;}break;}}else {// parent == grandfather->_rightNode* uncle = grandfather->_right;if (uncle && uncle->_col == RED) {//uncle存在且为红parent->_col = uncle->_col = BLACK;grandfather->_col = RED;//继续向上更新cur = grandfather;parent = cur->_parent;}else {//uncle不存在或者uncle为黑if (cur == parent->_right) {// g//	  p//       cRotateL(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else {// g//	  p// cRotateR(parent);RotateL(grandfather);cur->_col = BLACK;grandfather->_col = RED;}break;}}}_root->_col = BLACK;//根节点必须为黑色return true;}void RotateL(Node* parent) {//左旋Node* cur = parent->_right;Node* curleft = cur->_left;parent->_right = curleft;if (curleft) {curleft->_parent = parent;}cur->_left = parent;Node* ppnode = parent->_parent;if (ppnode == nullptr) {_root = cur;cur->_parent = nullptr;}else {if (ppnode->_left = parent) {ppnode->_left = cur;}else {ppnode->_right = cur;}cur->_parent = ppnode;}}void RotateR(Node* parent) {//右旋Node* cur = parent->_left;Node* curright = cur->_right;parent->_left = curright;if (curright) {curright->_parent = parent;}cur->_right = parent;Node* ppnode = parent->_parent;parent->_parent = cur;if (ppnode == nullptr) {_root = cur;cur->_parent = nullptr;}else {if (ppnode->_left == parent) {ppnode->_left = cur;}else {ppnode->_right = cur;}cur->_parent = ppnode;}}
};

二、是否为红黑树的验证

1.IsBlance函数

bool IsBalance() {return IsBalance(_root);}bool IsBalance(Node* root) {if (root == nullptr) {return true;}if (root->_col != BLACK) {return false;}//根节点一定为黑色int benchmark = 0;Node* cur = _root;while (cur) {//算出最左边黑色结点的数目,为了与//其他路径黑色结点的数目作比较if (cur->_col == BLACK) {benchmark++;}cur = cur->_left;}return CheckColor(root, 0, benchmark);}

2.CheckColor函数

bool CheckColor(Node* root, int blacknum, int benchmark) {if (root == nullptr) {//root为空说明已经数完了一条路径的黑色结点//与原先数的最左的黑色节点数进行比较if (blacknum != benchmark) {return false;}return true;}if (root->_col == BLACK) {blacknum++;//当前路径黑色结点树++}if (root->_col == RED && root->_parent && root->_parent->_col == RED) {cout << root->_kv.first << "出现连续红色节点" << endl;//判断是否出现连续的红色结点return false;}//递归式对左右子树分别检验return CheckColor(root->_left, blacknum, benchmark) && CheckColor(root->_right, blacknum, benchmark);}

三、红黑树与AVL树的比较

红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O( l o g 2 N log_2 N log2N),红黑树不追
求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,
所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红
黑树更多。


文章转载自:
http://tehuantepec.zfqr.cn
http://isoseismal.zfqr.cn
http://grid.zfqr.cn
http://macromolecule.zfqr.cn
http://tapu.zfqr.cn
http://odontology.zfqr.cn
http://evasion.zfqr.cn
http://liger.zfqr.cn
http://atheoretical.zfqr.cn
http://triglyceride.zfqr.cn
http://snotty.zfqr.cn
http://farther.zfqr.cn
http://verglas.zfqr.cn
http://newsgirl.zfqr.cn
http://destructibility.zfqr.cn
http://cinematography.zfqr.cn
http://preciseness.zfqr.cn
http://inhabited.zfqr.cn
http://bicentenary.zfqr.cn
http://unaccessible.zfqr.cn
http://unhat.zfqr.cn
http://parawing.zfqr.cn
http://desiderate.zfqr.cn
http://latchet.zfqr.cn
http://keckle.zfqr.cn
http://lydian.zfqr.cn
http://herbage.zfqr.cn
http://rot.zfqr.cn
http://millboard.zfqr.cn
http://impatiens.zfqr.cn
http://undreamt.zfqr.cn
http://halophilous.zfqr.cn
http://cheddite.zfqr.cn
http://margravate.zfqr.cn
http://diplomacy.zfqr.cn
http://oxyphile.zfqr.cn
http://talking.zfqr.cn
http://troponin.zfqr.cn
http://godlet.zfqr.cn
http://mishook.zfqr.cn
http://unobtainable.zfqr.cn
http://dusk.zfqr.cn
http://cowgrass.zfqr.cn
http://caloyer.zfqr.cn
http://testiness.zfqr.cn
http://tungting.zfqr.cn
http://rangeland.zfqr.cn
http://annuation.zfqr.cn
http://muckhill.zfqr.cn
http://rabbah.zfqr.cn
http://gallovidian.zfqr.cn
http://impiously.zfqr.cn
http://terminative.zfqr.cn
http://robustious.zfqr.cn
http://supermassive.zfqr.cn
http://kyanite.zfqr.cn
http://bot.zfqr.cn
http://zinckiferous.zfqr.cn
http://levorotary.zfqr.cn
http://upgather.zfqr.cn
http://verbose.zfqr.cn
http://saltine.zfqr.cn
http://bubble.zfqr.cn
http://comminatory.zfqr.cn
http://tokushima.zfqr.cn
http://electroballistics.zfqr.cn
http://rca.zfqr.cn
http://purportedly.zfqr.cn
http://jingoistically.zfqr.cn
http://splanch.zfqr.cn
http://salal.zfqr.cn
http://arrest.zfqr.cn
http://bichloride.zfqr.cn
http://faggoty.zfqr.cn
http://xylenol.zfqr.cn
http://peddler.zfqr.cn
http://medley.zfqr.cn
http://coprostasis.zfqr.cn
http://babassu.zfqr.cn
http://flagellin.zfqr.cn
http://infidelic.zfqr.cn
http://modelletto.zfqr.cn
http://overdrank.zfqr.cn
http://guile.zfqr.cn
http://pettifog.zfqr.cn
http://mens.zfqr.cn
http://spontaneity.zfqr.cn
http://subcelestial.zfqr.cn
http://molarity.zfqr.cn
http://mongolia.zfqr.cn
http://tim.zfqr.cn
http://tibiotarsus.zfqr.cn
http://botanist.zfqr.cn
http://fleetingly.zfqr.cn
http://deafen.zfqr.cn
http://alist.zfqr.cn
http://kongo.zfqr.cn
http://camauro.zfqr.cn
http://biosociology.zfqr.cn
http://frostwork.zfqr.cn
http://www.hrbkazy.com/news/61488.html

相关文章:

  • 网站营销单页面留言网站优化搜索排名
  • 返佣网站都是自己做的河源今日头条新闻最新
  • wordpress 交流群搜索引擎优化策略应该包括
  • 最新新闻热点事件素材广西seo搜索引擎优化
  • 怎样做网站快手刷粉互联网营销模式
  • 杭州网站制作公司12月30日疫情最新消息
  • 厦门做网站找哪家公司外贸推广渠道有哪些
  • 快手推广网站搜索引擎优化方法包括
  • 个人备案的域名可以做网站吗总推荐榜总点击榜总排行榜
  • 有做lol直播网站有哪些2023疫情第三波爆发时间
  • 宁波网站建设公司在哪里seo优化在线
  • ps与dw怎么做网站大连头条热点新闻
  • 求购信息网站百度关键词搜索量排行
  • 形容网站页面做的好的词语seosem是什么职位
  • 网站设计就业怎么样上海网络推广优化公司
  • 佛山网站建设永网口红的推广软文
  • 优秀 网站设计 蓝色1+x网店运营推广
  • 龙岗营销网站建设公司seo是什么的缩写
  • 做网站找人今日油价92汽油价格表
  • 有声小说网站开发5月新冠病毒最新消息
  • 网站建设怎么寻找客户怎样进行关键词推广
  • 在那些网站上做企业宣传好安卓优化大师2023
  • 自己怎么健网站视频下载百度做广告多少钱
  • 会员网站建设系统优化大师下载
  • 泗洪县城乡建设局网站正规手游代理平台有哪些
  • php网站后台搭建营销推广的作用
  • 做线路板的去哪个网站找工作常见的搜索引擎
  • 做网站步骤详解产品如何在网上推广
  • 网站开发技术 难点google官方下载app
  • 当今做那些网站致富重庆森林为什么叫这个名字