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

网站毕设代做多少钱优化推广关键词

网站毕设代做多少钱,优化推广关键词,专业团队宣传语,做网站不推广管用吗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/475216.html

相关文章:

  • 做销售的什么网站好电商软文范例100字
  • 毕设做音乐网站成都seo专家
  • 杭州专业制作网站制作公司网站
  • 做直播网站需要证书吗sem代运营费用
  • 做中学数学教案有哪些好的网站做网站好的网站建设公司
  • 温州网站公司优优群排名优化软件
  • 镇江网站建设哪家好图片优化
  • 建设的电影网站总是无法连接百度关键词价格
  • 吉安市网站建设品牌传播推广方案
  • 做网站搜索推广点击率太低怎么办优化技术基础
  • 南京网站设计哪家公司好销售推广方案
  • 在线制作论坛网站电脑优化大师有用吗
  • 建设网站建设费用易观数据app排行
  • 环评在那个网站做广州谷歌seo公司
  • 网站开发的前台开发工具热门搜索
  • 义乌商城集团的网站建设临沂seo公司
  • 天津市建设工程定额网站seo 优化顾问
  • 建公司网站需要哪些资料seo关键词排名优化软件怎么选
  • 做淘宝客服的网站百度登录个人中心官网
  • 网上做网站广告需要身份证吗福州seo建站
  • wordpress做视频站百度在线使用网页版
  • 戴尔公司网站建设品牌营销推广代运营
  • 100款禁用网站海外域名
  • 东莞营销型网站建设公司今日新闻头条最新消息
  • 建网站的公司哪里好网络营销包括
  • 眉山网站建设汉中网站seo
  • 住房城乡建设委官方网站网站优化排名操作
  • 网站建设佛关键词快速排名软件价格
  • 网站优化培训学校谷歌优化推广
  • 请人做网站要多少钱开发一个网站