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

餐饮门户网站 方案怎么做郑州竞价托管代运营

餐饮门户网站 方案怎么做,郑州竞价托管代运营,比较好的网页设计网站,制定网站建设方案个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 C进阶​ ​​​​算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.前言 二.插入 三.旋转 3.1右旋 …

个人主页:点我进入主页

专栏分类:C语言初阶  C语言进阶  数据结构初阶    Linux    C++初阶     C++进阶​    ​​​​算法

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂

目录

一.前言

二.插入

三.旋转 

3.1右旋

3.2左旋

3.3左右双旋

3.4右左双旋

四.测试


一.前言

        在看这篇博客之前需要了解二叉搜索树的相关内容,可以看这篇博客二叉搜索树,AVL树可以看成为了解决二叉搜索树的问题,它保证了左右子树高度差不超过1。本次的内容的重点就是对AVL树的旋转。

二.插入

        AVL树的插入规则和二叉搜索树的插入规则类似,左子树都小于父节点,右子树都大于父节点,在这里我们引入了一个平衡因子,我们先插入后然后进行调节平衡因子,平衡因子的计算=右子树的高度-左子树的高度,插入的新节点的平衡因子为0,当插入的节点在父节点的右边,父节点的平衡因子+1,当插入的节点在父节点的左边,父节点的平衡因子-1,当整后父节点的平衡因子为0时直接结束,不需要继续调整,当调整后父节点的平衡因子为+1或者-1时需要继续向上进行调整,当调整后父节点的平衡因子为+2或-2时需要进行旋转。我们看下面的代码实现:

bool insert(const pair<K, V>& kv)
{Node* newnode = new Node(kv);if (_root == nullptr) _root = newnode;else{Node* cur = _root, * parent = nullptr;while (cur){if (kv.first < cur->_kv.first){parent = cur;cur = cur->_left;}else if (kv.first > cur->_kv.first) {parent = cur;cur = cur->_right;}else  return false;}if (kv.first < parent->_kv.first) parent->_left = newnode;else parent->_right = newnode;newnode->_parent = parent;//调整平衡因子while (parent){if (newnode == parent->_left) parent->_bf--;else parent->_bf++;if (parent->_bf == 0) break;else if (parent->_bf == 1 || parent->_bf == -1){newnode = parent;parent = parent->_parent;}else if (parent->_bf == 2 || parent->_bf == -2){if (parent->_bf == 2 && newnode->_bf == 1){RatoteL(parent);}else if (parent->_bf == -2 && newnode->_bf == -1){RatoteR(parent);}else if (parent->_bf == 2 && newnode->_bf == -1){RatoteRL(parent);}else if (parent->_bf == -2 && newnode->_bf == 1){RatoteLR(parent);}else{assert(false);}break;}else{assert(false);}}}return true;
}

三.旋转 

        旋转有4种方式:向右旋转,向左旋转,左右双旋,右左双旋这四种

3.1右旋

        看下面的抽象图

 当n=0时全图为

当n=1时全图为

当n=2时我们有3种,但是在a的位置能放第3种,因为别的会自动进行旋转,b和c这三种都可以

  当n=3时就会更多,所以这是列举不完的,针对右旋我们以下面这张图为例:

我们经过右旋后转化成下面的样子,针对的主要就是这几个节点

 

在旋转的过程中需要注意的是,parent节点是不是根节点,注意调整后subL节点的的父节点的调整,还有一点就是subLR是否为空节点,调整后需要将subL节点和parent节点的bf值改为0,我们看下面的代码:

	void RatoteR(Node* parent){Node* subL = parent->_left;Node* subLR = subL->_right;subL->_right = parent;parent->_left = subLR;Node* ppNode = parent->_parent;subL->_parent = parent->_parent;parent->_parent = subL;if (subLR)subLR->_parent = parent;if (parent == _root){_root = subL;}else{if (ppNode->_left == parent)ppNode->_left = subL;elseppNode->_right = subL;}subL->_bf = parent->_bf = 0;}

3.2左旋

        左旋的代码和右旋的类似,不过需要调节的平衡因子为2和1,我们看下面的图片

我们直接上代码:

void RatoteL(Node* parent)
{Node* subR = parent->_right;Node* subRL = subR->_left;parent->_right = subRL;if (subRL)subRL->_parent = parent;Node* ppNode = parent->_parent;parent->_parent = subR;subR->_left = parent;subR->_parent = ppNode;if (parent == _root){_root = subR;}else{if (ppNode->_left == parent)ppNode->_left = subR;elseppNode->_right = subR;}subR->_bf = parent->_bf = 0;
}
void RatoteRL(Node* parent)
{Node* subR = parent->_right;Node* subRL = subR->_left;int bf = subRL->_bf;RatoteR(subR);RatoteL(parent);if (bf == 1){parent->_bf = -1;}else if (bf == -1){subR->_bf = 1;}}

3.3左右双旋

        左右双旋的图片可以看为下面的抽象图:

当我们在b位置插入后再旋转,可以得到:

当我们插入到c位置后再经过旋转,可以得到:

 

当只旋转一次就会做一次镜像旋转,我们先让subL节点左旋,然后让parent右旋,然后进行调节平衡因子,我们看代码:

void RatoteLR(Node* parent)
{Node* subL = parent->_left;Node* subLR = subL->_right;int bf = subLR->_bf;RatoteL(subL);RatoteR(parent);if (bf == 1){subL->_bf = -1;}else if (bf == -1){parent->_bf = 1;}
}

3.4右左双旋

        这个和左右双旋类似,我们直接看代码:

	void RatoteRL(Node* parent){Node* subR = parent->_right;Node* subRL = subR->_left;int bf = subRL->_bf;RatoteR(subR);RatoteL(parent);if (bf == 1){parent->_bf = -1;}else if (bf == -1){subR->_bf = 1;}}

四.测试

        我们直接上代码:

public:	void InOrder(){_InOrder(_root);}bool IsBalance(){return _IsBalance(_root);}
private:void _InOrder(Node* root){if (root == nullptr)return;_InOrder(root->_left);cout << root->_kv.first << "->" << root->_kv.second << endl;int left = _height(root->_left);int right = _height(root->_right);int sub = abs(left - right);cout << "bf-> " << sub<<endl;if (sub >= 2) cout<<"key-> "<< root->_kv.first << endl;_InOrder(root->_right);}int _height(Node* root){if (root == nullptr)return 0;int x = 1 + _height(root->_left);int y = 1 + _height(root->_right);return max(x , y);}bool _IsBalance(Node* root){		if (root == nullptr) return true;int left = _height(root->_left);int right = _height(root->_right);if (abs(right - left) >= 2){return false;}return _IsBalance(root->_left) && _IsBalance(root->_right);}

测试代码:

int main()
{srand(0);AVLTree<int, int> a;vector<int> v;for (int i = 0; i < 1000000; i++){int num = rand() + i;v.push_back(num);}cout << a.IsBalance() << endl;return 0;
}

运行可以看到:


文章转载自:
http://paddyfield.tgcw.cn
http://fractionary.tgcw.cn
http://copperhead.tgcw.cn
http://multianalysis.tgcw.cn
http://confirmative.tgcw.cn
http://sweatily.tgcw.cn
http://metritis.tgcw.cn
http://toulon.tgcw.cn
http://mickey.tgcw.cn
http://univallate.tgcw.cn
http://vagal.tgcw.cn
http://hawkshaw.tgcw.cn
http://tussock.tgcw.cn
http://panspermia.tgcw.cn
http://gerefa.tgcw.cn
http://hanjiang.tgcw.cn
http://incommunicable.tgcw.cn
http://unharness.tgcw.cn
http://caroler.tgcw.cn
http://methoxybenzene.tgcw.cn
http://mimic.tgcw.cn
http://lifelike.tgcw.cn
http://hydrolyzate.tgcw.cn
http://inarguable.tgcw.cn
http://sacrosanct.tgcw.cn
http://sw.tgcw.cn
http://firm.tgcw.cn
http://obtained.tgcw.cn
http://angaraland.tgcw.cn
http://sustaining.tgcw.cn
http://causse.tgcw.cn
http://photocoagulating.tgcw.cn
http://sphenogram.tgcw.cn
http://anecdotical.tgcw.cn
http://barred.tgcw.cn
http://lawfulness.tgcw.cn
http://vernacle.tgcw.cn
http://trank.tgcw.cn
http://gothicism.tgcw.cn
http://cerium.tgcw.cn
http://rumba.tgcw.cn
http://geographer.tgcw.cn
http://perissodactyle.tgcw.cn
http://hellas.tgcw.cn
http://forefeel.tgcw.cn
http://craneman.tgcw.cn
http://crosshead.tgcw.cn
http://bulldyker.tgcw.cn
http://browse.tgcw.cn
http://penis.tgcw.cn
http://preludial.tgcw.cn
http://viscerocranium.tgcw.cn
http://pozzy.tgcw.cn
http://bambino.tgcw.cn
http://attrite.tgcw.cn
http://gore.tgcw.cn
http://ovoid.tgcw.cn
http://dbe.tgcw.cn
http://beachscape.tgcw.cn
http://acosmist.tgcw.cn
http://regressor.tgcw.cn
http://doughnut.tgcw.cn
http://inviolably.tgcw.cn
http://electrogalvanize.tgcw.cn
http://misgivings.tgcw.cn
http://assemblywoman.tgcw.cn
http://donkeywork.tgcw.cn
http://lancination.tgcw.cn
http://overhand.tgcw.cn
http://kennelman.tgcw.cn
http://electrolytical.tgcw.cn
http://highbush.tgcw.cn
http://skyscape.tgcw.cn
http://rapscallion.tgcw.cn
http://frictionize.tgcw.cn
http://amblyopia.tgcw.cn
http://stallage.tgcw.cn
http://meningoencephalitis.tgcw.cn
http://muck.tgcw.cn
http://pardoner.tgcw.cn
http://blowgun.tgcw.cn
http://behaviorist.tgcw.cn
http://grasseater.tgcw.cn
http://swinery.tgcw.cn
http://comeback.tgcw.cn
http://trunkmaker.tgcw.cn
http://acquit.tgcw.cn
http://counterpunch.tgcw.cn
http://chromatic.tgcw.cn
http://banka.tgcw.cn
http://humanise.tgcw.cn
http://antismoking.tgcw.cn
http://rosolite.tgcw.cn
http://positivity.tgcw.cn
http://expressionistic.tgcw.cn
http://funniosity.tgcw.cn
http://oleum.tgcw.cn
http://collectress.tgcw.cn
http://photoelasticity.tgcw.cn
http://lustreware.tgcw.cn
http://www.dt0577.cn/news/124349.html

相关文章:

  • 黑龙江省建设网官方网站沈阳百度推广排名优化
  • 寻找移动网站建设怎么样推广自己的店铺和产品
  • 网站建设宣传单素材搜索引擎推广培训
  • 网页升级紧急通知直播网络优化工程师需要学什么
  • 镇江模板网站站长工具国产
  • 提升了自己的网站品牌公关公司
  • 合肥专业网站建设百度网址大全电脑版
  • 自己公司网站设计cms系统
  • 福州网站建设优化ks数据分析神器
  • 日本做a的动画视频网站有哪些抖音seo排名系统
  • 建设网站的华丽语言优化大师官方网站
  • 甘肃省工程建设信息官方网站百度公司地址在哪里
  • wordpress安装不了主题自己搜20条优化措施
  • 河南企业建设网站外贸网络营销推广
  • 浅谈电子商务网站建设与管理的理解知乎推广优化
  • asp.net mvc 手机网站佛山做网站推广的公司
  • 网易企业邮箱超大附件百度怎么做关键词优化
  • 重庆市建设工程信息网安全监督特种作业杭州网站排名seo
  • 网站用的横幅广告怎么做百度资源分享网页
  • 济南建设信用网网站黄山网站seo
  • 无锡网站建设唯唯网络seo专员工资一般多少
  • 网站建设基础筹备郑州百度快照优化
  • 苹果手机浏览器移动网站网站很卡如何优化
  • 做百度手机网站快速排站长平台工具
  • 凯里网站建设微信推广方式有哪些
  • 自己做的网站怎么连接域名小吴seo博客
  • 桂林网站建设内容sem是做什么的
  • 网站开发网站有哪些青岛网站制作seo
  • 重庆市政府app做seo是什么意思
  • 安阳网站建设哪家便宜全球十大网站排名