中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

餐飲門戶網(wǎng)站 方案怎么做百度競價開戶費用

餐飲門戶網(wǎng)站 方案怎么做,百度競價開戶費用,福建泉州做網(wǎng)站公司哪家好,wordpress頁面與文章不同的小工具個人主頁:點我進入主頁 專欄分類:C語言初階 C語言進階 數(shù)據(jù)結(jié)構(gòu)初階 Linux C初階 C進階? ????算法 歡迎大家點贊,評論,收藏。 一起努力,一起奔赴大廠 目錄 一.前言 二.插入 三.旋轉(zhuǎn) 3.1右旋 …

個人主頁:點我進入主頁

專欄分類:C語言初階??C語言進階??數(shù)據(jù)結(jié)構(gòu)初階? ??Linux?? ?C++初階? ???C++進階?? ? ????算法

歡迎大家點贊,評論,收藏。

一起努力,一起奔赴大廠

目錄

一.前言

二.插入

三.旋轉(zhuǎn)?

3.1右旋

3.2左旋

3.3左右雙旋

3.4右左雙旋

四.測試


一.前言

? ? ? ? 在看這篇博客之前需要了解二叉搜索樹的相關(guān)內(nèi)容,可以看這篇博客二叉搜索樹,AVL樹可以看成為了解決二叉搜索樹的問題,它保證了左右子樹高度差不超過1。本次的內(nèi)容的重點就是對AVL樹的旋轉(zhuǎn)。

二.插入

? ? ? ? AVL樹的插入規(guī)則和二叉搜索樹的插入規(guī)則類似,左子樹都小于父節(jié)點,右子樹都大于父節(jié)點,在這里我們引入了一個平衡因子,我們先插入后然后進行調(diào)節(jié)平衡因子,平衡因子的計算=右子樹的高度-左子樹的高度,插入的新節(jié)點的平衡因子為0,當(dāng)插入的節(jié)點在父節(jié)點的右邊,父節(jié)點的平衡因子+1,當(dāng)插入的節(jié)點在父節(jié)點的左邊,父節(jié)點的平衡因子-1,當(dāng)整后父節(jié)點的平衡因子為0時直接結(jié)束,不需要繼續(xù)調(diào)整,當(dāng)調(diào)整后父節(jié)點的平衡因子為+1或者-1時需要繼續(xù)向上進行調(diào)整,當(dāng)調(diào)整后父節(jié)點的平衡因子為+2或-2時需要進行旋轉(zhuǎn)。我們看下面的代碼實現(xiàn):

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;//調(diào)整平衡因子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;
}

三.旋轉(zhuǎn)?

? ? ? ? 旋轉(zhuǎn)有4種方式:向右旋轉(zhuǎn),向左旋轉(zhuǎn),左右雙旋,右左雙旋這四種

3.1右旋

? ? ? ? 看下面的抽象圖

?當(dāng)n=0時全圖為

當(dāng)n=1時全圖為

當(dāng)n=2時我們有3種,但是在a的位置能放第3種,因為別的會自動進行旋轉(zhuǎn),b和c這三種都可以

? 當(dāng)n=3時就會更多,所以這是列舉不完的,針對右旋我們以下面這張圖為例:

我們經(jīng)過右旋后轉(zhuǎn)化成下面的樣子,針對的主要就是這幾個節(jié)點

?

在旋轉(zhuǎn)的過程中需要注意的是,parent節(jié)點是不是根節(jié)點,注意調(diào)整后subL節(jié)點的的父節(jié)點的調(diào)整,還有一點就是subLR是否為空節(jié)點,調(diào)整后需要將subL節(jié)點和parent節(jié)點的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左旋

? ? ? ? 左旋的代碼和右旋的類似,不過需要調(diào)節(jié)的平衡因子為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左右雙旋

? ? ? ? 左右雙旋的圖片可以看為下面的抽象圖:

當(dāng)我們在b位置插入后再旋轉(zhuǎn),可以得到:

當(dāng)我們插入到c位置后再經(jīng)過旋轉(zhuǎn),可以得到:

?

當(dāng)只旋轉(zhuǎn)一次就會做一次鏡像旋轉(zhuǎn),我們先讓subL節(jié)點左旋,然后讓parent右旋,然后進行調(diào)節(jié)平衡因子,我們看代碼:

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://www.risenshineclean.com/news/37569.html

相關(guān)文章:

  • 石家莊做網(wǎng)站建設(shè)公司外鏈查詢
  • 尋找移動網(wǎng)站建設(shè)開魯網(wǎng)站seo不用下載
  • 小程序有什么用武漢seo管理
  • 做項目掙錢的網(wǎng)站seo快速排名軟件品牌
  • wordpress 熱門用戶網(wǎng)頁優(yōu)化包括什么
  • 移動端網(wǎng)站模板怎么做網(wǎng)絡(luò)推廣員的日常工作
  • 網(wǎng)頁的網(wǎng)站建設(shè)在哪里搜索引擎站長平臺
  • 微網(wǎng)站左側(cè)隱藏導(dǎo)航菜單鄭州網(wǎng)絡(luò)營銷策劃
  • 湖北潛江資訊網(wǎng)紹興seo計費管理
  • 一流的網(wǎng)站建設(shè)哪家好最近的新聞大事
  • 麗水連都區(qū)建設(shè)局網(wǎng)站網(wǎng)絡(luò)推廣運營推廣
  • 手機網(wǎng)站微信登陸推廣是什么意思
  • 東莞響應(yīng)式網(wǎng)站建設(shè)抖音排名優(yōu)化
  • 做網(wǎng)站編輯我能力得到提升cps推廣接單平臺
  • 免費推廣做產(chǎn)品的網(wǎng)站廣州新聞24小時爆料熱線
  • 福建咨詢網(wǎng)站建設(shè)商家站長之家端口掃描
  • 什么是網(wǎng)絡(luò)營銷行為分析滎陽seo推廣
  • 電腦如何創(chuàng)建網(wǎng)頁優(yōu)化落實疫情防控新十條
  • 網(wǎng)站管理建設(shè)的總結(jié)中層管理者培訓(xùn)課程有哪些
  • 廣州市網(wǎng)站開發(fā)搜索引擎有哪些分類
  • 企業(yè)網(wǎng)站實驗報告網(wǎng)站優(yōu)化排名易下拉軟件
  • 企業(yè)官方網(wǎng)站認(rèn)證友情鏈接有哪些作用
  • 湖北網(wǎng)站設(shè)計制作開發(fā)廈門網(wǎng)站到首頁排名
  • 網(wǎng)站注冊時間網(wǎng)站點擊量 哪里查詢
  • 深圳網(wǎng)站seo 樂云踐新常用的網(wǎng)絡(luò)營銷工具
  • 靜態(tài)網(wǎng)站如何做自適應(yīng)移動端aso優(yōu)化工具
  • it外包人員有多慘涇縣網(wǎng)站seo優(yōu)化排名
  • 高質(zhì)量的合肥網(wǎng)站建設(shè)百度高級搜索頁面
  • 局域網(wǎng)內(nèi)做網(wǎng)站優(yōu)化seo廠家
  • 濰坊制作網(wǎng)站的公司搜索引擎調(diào)詞軟件