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

网站如何做线上推广百度小程序关键词优化

网站如何做线上推广,百度小程序关键词优化,p2p网站制作 杭州,看剧资源网站怎么做的AVL树是严格平衡的。 红⿊树是⼀棵⼆叉搜索树。 通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束&#xff0c;红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍&#xff0c;因⽽是接近平衡的。即最长路径<最短路径的2倍。 红黑树规则&#xff1a; 1. 每个结点不是红⾊…

AVL树是严格平衡的。

红⿊树是⼀棵⼆叉搜索树。 通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。即最长路径<=最短路径的2倍。

红黑树规则:

1. 每个结点不是红⾊就是⿊⾊

2. 根结点是⿊⾊的

3. 如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的 红⾊结点。即不存在连续红色的。

4. 对于任意⼀个结点,从该结点到其所有NULL结点的简单路径上,均包含相同数量的⿊⾊结点。即每条路径的黑色节点的个数相等。(比较严格)

新插入节点插入红色。如果插入黑色就一定会违反规则4,因为规则4比较严格,所以不要破坏规则4。

 红黑树的抽象图:

情况一:cur是新增节点,cur是红,p是红,u是红且存在,g是黑。

变换规则是:

 

代码如下所示:

	//1.叔叔存在且是红。p变黑,u变黑,g变红。如果g是根再次变黑,否则继续向上更新。if (uncle && uncle->_col == RED){parent->_col = uncle->_col = BLACK;grandfather->_col = RED;cur = parent;//继续向上更新parent = cur->_parent;}//2.叔叔不存在/存在且是黑else{if (cur == parent->_left)//单旋{//     g                 p//   p   u------>     c    g// c                          uRotateR(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else//双旋{//      g                 g            c//   p     u    ->      c    u   ->  p     g//      c             p                        uRotateL(parent);RotateR(grandfather);cur->_col = BLACK;grandfather->_col = RED;}break;}
}

情况二:cur是新增节点,cur是红,p是红,g是黑,u不存在/存在且为黑。

 情况二还有一种情况是双旋+变色。具体的实现代码如下所示:

	//2.叔叔不存在/存在且是黑
else
{if (cur == parent->_left)//单旋{//     g                 p//   p   u------>     c    g// c                          uRotateR(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else//双旋{//      g                 g            c//   p     u    ->      c    u   ->  p     g//      c             p                        uRotateL(parent);RotateR(grandfather);cur->_col = BLACK;grandfather->_col = RED;}break;
}

 整体代码如下:

enum Colour
{RED,BLACK
};
template<class K,class T>
struct RBTreeNode {RBTreeNode<K, T>* _left;RBTreeNode<K, T>* _right;RBTreeNode<K, T>* _parent;pair<K, T> _kv;Colour _col;RBTreeNode(const pair<K, T>& kv):_left(nullptr),_right(nullptr),_parent(nullptr),_kv(kv),_col(RED){}
};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;//当父亲不为空且父亲是红色的时候,关键是看叔叔,分两种情况:1.叔叔存在且是红。2.叔叔不存在/存在且是黑while (parent && parent->_col == RED){Node* grandfather = parent->_parent;if (parent == grandfather->_left)//叔叔在爷爷的右边{Node* uncle = grandfather->_right;//1.叔叔存在且是红。p变黑,u变黑,g变红。如果g是根再次变黑,否则继续向上更新。if (uncle && uncle->_col == RED){parent->_col = uncle->_col = BLACK;grandfather->_col = RED;cur = parent;//继续向上更新parent = cur->_parent;}//2.叔叔不存在/存在且是黑else{if (cur == parent->_left)//单旋{//     g                 p//   p   u------>     c    g// c                          uRotateR(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else//双旋{//      g                 g            c//   p     u    ->      c    u   ->  p     g//      c             p                        uRotateL(parent);RotateR(grandfather);cur->_col = BLACK;grandfather->_col = RED;}break;}}else//叔叔在爷爷的左边{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//            cif (cur == parent->_right){RotateL(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else{//		g//   u     p//      cRotateR(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;subL->_right = parent;Node* ppNode = parent->_parent;parent->_parent = subL;if (parent == _root){_root = subL;_root->_parent = nullptr;}else{if (ppNode->_left == parent){ppNode->_left = subL;}else{ppNode->_right = subL;}subL->_parent = ppNode;}}void RotateL(Node* parent)//左旋{Node* subR = parent->_right;Node* subRL = subR->_left;parent->_right = subRL;if (subRL)subRL->_parent = parent;subR->_left = parent;Node* ppNode = parent->_parent;parent->_parent = subR;if (parent == _root){_root = subR;_root->_parent = nullptr;}else{if (ppNode->_right == parent){ppNode->_right = subR;}else{ppNode->_left = subR;}subR->_parent = ppNode;}}bool IsBalance()//判断是否平衡,满足规则。{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)//refNum先找一个参考值计算黑色节点的个数。{if (root == nullptr){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);}private:Node* _root = nullptr;
};
http://www.dtcms.com/wzjs/69642.html

相关文章:

  • 重庆永川网站建设seo查询爱站网
  • 长沙做网站备案网站关键词收录查询
  • 县委县政府政府网站建设总结营销方式和营销策略
  • 微信公众号怎么做网站济南百度竞价开户
  • 哪些网站可以做招商广告bt磁力搜索神器
  • Wordpress报价主题微信搜索seo优化
  • 有哪些招聘网站seo搜索引擎优化兴盛优选
  • 温州手机网站开发外贸网站免费推广
  • 怎么说服客户做网站百度端口开户推广
  • 公司网站开发排名杭州seo排名优化外包
  • 天津体验网站关键词排名点击器
  • wordpress文章发布没有页面模板免费下载百度seo
  • 东莞企业网站建设宁波网站推广优化哪家正规
  • 连云港权威网站优化服务班级优化大师下载安装最新版
  • 免代码开发平台seo网站推广工具
  • 毕设代做网站近期的新闻热点
  • 做网站宣传图的网站如何制作网页广告
  • 做视频网站可行吗线上推广如何引流
  • 深圳专业做网站哪家好厦门seo排名优化公司
  • 做日语网站个人博客登录首页
  • 枣庄手机网站制作营销型网站建设的主要流程包括
  • 阿里云建设网站好吗建设网站的网站首页
  • 网站后台 无法插入图片北京seo服务销售
  • 专业网站建设新闻长沙seo优化推荐
  • 做pc端网站要多少钱淘宝热搜关键词排行榜
  • 内江市网站建设网站策划运营
  • 网站备案幕布 下载如何开网店
  • 网站 seo百度sem推广
  • 邯郸做网站服务商东莞网络公司电话
  • 哈尔滨模板建站服务商广州网站推广平台