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

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

仿做唯品會網(wǎng)站黃岡便宜的網(wǎng)站推廣怎么做

仿做唯品會網(wǎng)站,黃岡便宜的網(wǎng)站推廣怎么做,浙江購物網(wǎng)站開發(fā)設(shè)計,做網(wǎng)站網(wǎng)絡(luò)營銷注意💓博主CSDN主頁:麻辣韭菜💓 ? ?專欄分類:C知識分享? ? 🚚代碼倉庫:C高階🚚 ? 🌹關(guān)注我🫵帶你學(xué)習(xí)更多C知識 ? 🔝🔝 前言 前面我們實現(xiàn)了AVL樹,發(fā)明AVL樹…

💓博主CSDN主頁:麻辣韭菜💓
?
?專欄分類:C++知識分享?
?
🚚代碼倉庫:C++高階🚚
?
🌹關(guān)注我🫵帶你學(xué)習(xí)更多C++知識
? 🔝🔝


?


前言

前面我們實現(xiàn)了AVL樹,發(fā)明AVL樹的人是天才,那發(fā)明紅黑樹的人就是天才中天才。

AVL由于加入平衡因子,所以對樹的平衡過于嚴格。這就導(dǎo)致了頻繁的旋轉(zhuǎn)。從而增加時間復(fù)雜度。這也是為什么map和set底層的封裝沒有用AVL樹,而是用的紅黑樹!!!

一、紅黑樹的概念

紅黑樹 ,是一種 二叉搜索樹 ,但 在每個結(jié)點上增加一個存儲位表示結(jié)點的顏色,可以是 Red
Black 。 通過對 任何一條從根到葉子的路徑上各個結(jié)點著色方式的限制,紅黑樹確保沒有一條路
徑會比其他路徑長出倆倍 ,因而是 接近平衡 的。

二、紅黑樹的性質(zhì)?

1. 每個結(jié)點不是紅色就是黑色
2. 根節(jié)點是黑色的?
3. 如果一個節(jié)點是紅色的,則它的兩個孩子結(jié)點是黑色的?
4. 對于每個結(jié)點,從該結(jié)點到其所有后代葉結(jié)點的簡單路徑上,均 包含相同數(shù)目的黑色結(jié)點?
5. 每個葉子結(jié)點都是黑色的 ( 此處的葉子結(jié)點指的是空結(jié)點 )

三、紅黑樹節(jié)點的定義 ?

enum Color //顏色
{RED,BLACK,
};template<class T, class V>
struct RBTreeNode
{RBTreeNode<T, V>* _left; //左孩子RBTreeNode<T, V>* _right; //右孩子RBTreeNode<T, V>* _parent; //父親pair<T, V> _kv;Color _col;RBTreeNode(const pair<T, V>& kv):_left(nullptr), _right(nullptr), _parent(nullptr), _kv(kv), _col(RED) //為什么默認是紅色?根節(jié)點必須是黑色,這就意味著默認給黑色那么調(diào)整次數(shù)就會變多。{}
};

利用節(jié)點這個類,我們再定義紅黑樹類 。

template <class T, class V>
class RBTree
{typedef RBTreeNode<T, V> Node; //節(jié)點名字太長 重新命名
private:Node* _root;
};

四、紅黑樹插入?

??插入的代碼這里細節(jié),從搜索二叉樹到AVL樹,都是一樣的。

bool Insert(const pair<T, V>& kv){if (_root == nullptr) //判斷是不是第一次{_root = new Node(kv);_root->_col = BLACK;return true;}Node* parent = nullptr;Node* cur = _root;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);//判斷k的值是大于還是小于父親的k值if (parent->_kv.first > kv.first){parent->_left = cur;}else{parent->_right = cur;}cur->_parent = parent;}
因為 新節(jié)點的默認顏色是紅色 ,因此:如果 其雙親節(jié)點的顏色是黑色,沒有違反紅黑樹任何
性質(zhì) ,則不需要調(diào)整;但 當(dāng)新插入節(jié)點的雙親節(jié)點顏色為紅色時,就違反了性質(zhì)三不能有連
在一起的紅色節(jié)點 ,此時需要對紅黑樹分情況來討論:

?約定:cur為當(dāng)前節(jié)點,p為父節(jié)點,g為祖父節(jié)點,u為叔叔節(jié)點

?情況一: cur為紅,p為紅,g為黑,u存在且為紅

?

  • ?如果g是根節(jié)點,調(diào)整完成后,需要將g改為黑色
  • 如果g是子樹,g一定有雙親,且g的雙親如果是紅色,需要繼續(xù)向上調(diào)整

?情況二: cur為紅,p為紅,g為黑,u不存在/u存在且為黑

?

?說明:u的情況有兩種
1.如果u節(jié)點不存在,則cur一定是新插入節(jié)點,因為如果cur不是新插入節(jié)點則cur和p一定有一個節(jié)點的顏色是黑色,就不滿足性質(zhì)4:每條路徑黑色節(jié)點個數(shù)相同。
2.如果u節(jié)點存在,則其一定是黑色的,那么cur節(jié)點原來的顏色一定是黑色的現(xiàn)在看到其是紅色的原因是因為cur的子樹在調(diào)整的過程中將cur節(jié)點的顏色由黑色改成紅色。
p為g的左孩子,cur為p的左孩子,則進行右單旋轉(zhuǎn);相反p為g的右孩子,cur為p的右孩子,則進行左單旋轉(zhuǎn)p、g變色--p變黑,g變紅

?情況三: cur為

p g 的左孩子, cur p 的右孩子,則針對 p 做左單旋轉(zhuǎn);相反,
p g 的右孩子, cur p 的左孩子,則針對 p 做右單旋轉(zhuǎn)
則轉(zhuǎn)換成了情況2

?

while (parent && parent->_col == RED){Node* grandfather = parent->_parent;if (grandfather->_left == parent){Node* uncle = grandfather->_right;// 情況1:u存在且為紅,變色處理,并繼續(xù)往上處理if (uncle && uncle->_col == RED){parent->_col = BLACK;uncle->_col = BLACK;grandfather->_col = RED;// 繼續(xù)往上調(diào)整cur = grandfather;parent = cur->_parent;}else // 情況2+3:u不存在/u存在且為黑,旋轉(zhuǎn)+變色{//     g//   p   u// c if (cur == parent->_left){RotateR(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else{//     g//   p   u//     cRotateL(parent);RotateR(grandfather);cur->_col = BLACK;//parent->_col = RED;grandfather->_col = RED;}break;}}else // (grandfather->_right == parent){//    g//  u   p//        cNode* uncle = grandfather->_left;// 情況1:u存在且為紅,變色處理,并繼續(xù)往上處理if (uncle && uncle->_col == RED){parent->_col = BLACK;uncle->_col = BLACK;grandfather->_col = RED;// 繼續(xù)往上調(diào)整cur = grandfather;parent = cur->_parent;}else // 情況2+3:u不存在/u存在且為黑,旋轉(zhuǎn)+變色{//    g//  u   p//        cif (cur == parent->_right){RotateL(grandfather);grandfather->_col = RED;parent->_col = BLACK;}else{//    g//  u   p//    cRotateR(parent);RotateL(grandfather);cur->_col = BLACK;grandfather->_col = RED;}break;}}}_root->_col = BLACK;return true;}

?關(guān)于旋轉(zhuǎn)不懂的,你可以去看之前的C++ AVL樹底層實現(xiàn)原理。關(guān)于驗證紅黑樹,大家感興趣的可以去我碼云看完整代碼!!!

http://www.risenshineclean.com/news/37627.html

相關(guān)文章:

  • pmp培訓(xùn)seo網(wǎng)站
  • 沈陽網(wǎng)站搜索引擎優(yōu)化google推廣教程
  • 網(wǎng)頁版視頻網(wǎng)站建設(shè)需要多少錢百度sem推廣具體做什么
  • kol合作推廣seo外鏈是什么
  • 自己創(chuàng)業(yè)做原公司一樣的網(wǎng)站網(wǎng)站seo設(shè)計
  • 公司做網(wǎng)站的步驟廣州seo關(guān)鍵字推廣
  • 做韋恩圖的網(wǎng)站怎么樣推廣自己的公司
  • wordpress 添加導(dǎo)航菜單成都seo招聘
  • 網(wǎng)站域名有什么用計算機培訓(xùn)
  • 大學(xué)新校區(qū)建設(shè)網(wǎng)站網(wǎng)站seo重慶
  • 網(wǎng)站推廣資訊上海百度競價托管
  • 中國大型建筑公司有哪些seo西安
  • 全國公安網(wǎng)站備案應(yīng)用寶aso優(yōu)化
  • 班級建設(shè)網(wǎng)站設(shè)計方案搜索引擎優(yōu)化到底是優(yōu)化什么
  • 陜西省建設(shè)廳小紅書關(guān)鍵詞排名優(yōu)化
  • java 網(wǎng)站設(shè)計都有什么推廣平臺
  • 香港網(wǎng)站代理seo優(yōu)化方案
  • 南昌做網(wǎng)站市場報價刷seo關(guān)鍵詞排名軟件
  • 做網(wǎng)站設(shè)計累嗎網(wǎng)絡(luò)營銷策劃步驟
  • css優(yōu)秀網(wǎng)站百度平臺客服
  • 網(wǎng)站制作公司官網(wǎng)南京長沙百度
  • 淘客做網(wǎng)站百度關(guān)鍵詞優(yōu)化專家
  • 找哪個網(wǎng)站做摩配百度投訴電話人工服務(wù)總部
  • 羅湖建設(shè)網(wǎng)站志鴻優(yōu)化設(shè)計答案網(wǎng)
  • wordpress圖片展示主題yousucai寧波網(wǎng)站推廣優(yōu)化外包
  • 做網(wǎng)站工商局要不要備案呢色盲測試圖 考駕照
  • cname解析對網(wǎng)站影響seo課程心得體會
  • 商務(wù)網(wǎng)站制作語言基礎(chǔ)seo平臺怎么樣
  • 烏蘭察布做網(wǎng)站的公司百度推廣是怎么做的
  • 求幾個夸克沒封的a站2023惠州seo排名外包