国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

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

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

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

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


?


前言

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

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

一、紅黑樹的概念

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

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

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

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

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) //為什么默認(rèn)是紅色?根節(jié)點(diǎn)必須是黑色,這就意味著默認(rèn)給黑色那么調(diào)整次數(shù)就會(huì)變多。{}
};

利用節(jié)點(diǎn)這個(gè)類,我們?cè)俣x紅黑樹類 。

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

四、紅黑樹插入?

??插入的代碼這里細(xì)節(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;}
因?yàn)?/span> 新節(jié)點(diǎn)的默認(rèn)顏色是紅色 ,因此:如果 其雙親節(jié)點(diǎn)的顏色是黑色,沒(méi)有違反紅黑樹任何
性質(zhì) ,則不需要調(diào)整;但 當(dāng)新插入節(jié)點(diǎn)的雙親節(jié)點(diǎn)顏色為紅色時(shí),就違反了性質(zhì)三不能有連
在一起的紅色節(jié)點(diǎn) ,此時(shí)需要對(duì)紅黑樹分情況來(lái)討論:

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

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

?

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

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

?

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

?情況三: cur為

p g 的左孩子, cur p 的右孩子,則針對(duì) p 做左單旋轉(zhuǎn);相反,
p g 的右孩子, cur p 的左孩子,則針對(duì) 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樹底層實(shí)現(xiàn)原理。關(guān)于驗(yàn)證紅黑樹,大家感興趣的可以去我碼云看完整代碼!!!

http://m.aloenet.com.cn/news/37627.html

相關(guān)文章:

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