05.13_111期_C++_紅黑樹

紅黑樹的性質
保證樹中最長路徑的長度不超過最短路徑的長度的兩倍
用什么方法保證上面這一點?將樹中的結點視為是有顏色的
?采用如下的規則:
?? ? ?rule1: 樹中的結點不是紅色就是黑色
?? ? ?rule2: 樹的根節點是黑色的
?? ? ?rule3: 如果一個結點是紅色的,則這個結點的左右孩子都是黑色的
?? ? ?rule4: 對于每個結點,該節點到其所有后代葉節點的簡單路徑上,均包含相同數目的黑色節點
?? ? ?rule5: 每個葉?? ?子節點都是黑色的
?? ??? ?對rule5的說明
?? ??? ?rule5保證了規則體系完備,空結點視為是葉子節點,那么每個空結點就決定了一條路徑,
?? ??? ?rule4在計算路徑長度的時候,并不把空結點計算在內,但是只要存在路徑就必須計算長度
?? ??? ?比如 下面的左下圖是紅黑樹,右下圖不是紅黑樹,(-代表當前結點和有非空左孩子或者右孩子)
?? ??? ??? ??? ?-B-?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?-B-
?? ??? ??? ?B?? ??? ?-R-? ? ? ? ? ? ? ? ? ? ? ? ? ???B?? ??? ?R-
?? ??? ??? ??? ?B?? ??? ?-B? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -B
?? ??? ??? ??? ??? ?R?? ??? ??? ??? ??? ??? ??? ??? ??? ??

		while (parent && parent->_col == RED){Node* grandfather = parent->_parent;//緊接著的if()else{}判斷叔叔所在的位置// 這個位置直接確定了下面旋轉的(如果需要的話)方向if (parent == grandfather->_left){Node* uncle = grandfather->_right;//如果叔叔存在,且叔叔的顏色為紅,只需變色即可if (uncle && uncle->_col == RED){parent->_col = uncle->_col = BLACK;grandfather->_col = RED;// 繼續往上處理cur = grandfather;parent = cur->_parent;}//如果叔叔不存在,或者叔叔的顏色為黑,必須考慮旋轉的情況else{// 當叔叔的顏色為黑,那么要考慮新插入的結點是在// 其父親結點 p 的左子樹上,還是在其父親結點的右子樹上,// 以確定旋轉是進行兩次,還是進行一次if (cur == parent->_left){//如果是如圖所示的結構,只需要調整 c p g 條路徑// 調整的方式是右單旋,函數傳入的參數是g//	    	g//		p		u//  cRotateright(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else{//如果是如圖所示的結構,只需要調整 c p g 條路徑(其中c是p的右子樹)// 調整的方式是先左單旋,函數傳入的參數是p,調整p和c的父子關系// 再右單旋,傳入的參數是g//	    	g//		p		u//			cRotateleft(parent);Rotateright(grandfather);//此處一定要畫圖進行理解,cur經過兩次最后成為了輩分最高的結點//p和g成為了兄弟,而且都需要變成紅色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 //叔叔不存在,或存在且為黑的情況{if (cur == parent->_right){//	    	g//		u		p//					cRotateleft(grandfather);parent->_col = BLACK;grandfather->_col = RED;}else{//	    	g//		u		p//			cRotateright(parent);Rotateleft(grandfather);cur->_col = BLACK;grandfather->_col = RED;}break;}}}_root->_col = BLACK;

? ?R

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13274.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遇見問題-mysql8.0.28 this is incompatible with sql_mode=only_full_group_by

1.錯誤分析以及原因 1.1.sql_mode sql_mode 是數據庫規范校驗規則,比如這里的sql_modeonly_full_group_by 就是一個校驗規則,會規定分組查詢結果集不能有GROUP BY中沒有出現的列。 1.2.問題原因 mysql 5.7.5 版本及以上版本會出現,mysql …

邦注科技 電解式超聲波清洗機的原理介紹

電解式超聲波去除模具表面油污銹跡的原理結合了電解和超聲波技術的優勢。 首先,電解作用是通過在特定的電解槽中,將模具作為陰極(放入清洗框即可),并將有制式電極棒作為陽極。在電解過程中,電流如同魔法師…

Cache基本原理--以TC3xx為例(1)

目錄 1.為什么要使用Cache 2.Memory與Cache如何映射 2.1 地址映射概設 3.小結 為什么要使用Cache?為什么在多核工程里要謹慎使用DCache?Cache里的數據、指令是如何與Memory映射? 靈魂三連后,軟件工程師應該都會有模糊的回答&…

【虛擬仿真】Unity3D中實現對大疆無人機遙控器手柄按鍵響應

推薦閱讀 CSDN主頁GitHub開源地址Unity3D插件分享簡書地址QQ群:398291828大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時更新Unity開發技巧,覺得有用記得一鍵三連哦。 一、前言 最近項目中需要用到大疆無人機遙控器對程序中無人機進行控制,遙控器是下圖這一款: 博主發…

微信小程序之九宮格抽獎

1.實現效果 2. 實現步驟 話不多說&#xff0c;直接上代碼 /**index.wxml*/ <view class"table-list flex fcc fwrap"><block wx:for"{{tableList}}" wx:key"id"><view class"table-item btn fcc {{isTurnOver?:grayscale…

基于springboot+vue+Mysql的交流互動系統

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

java入門詳細教程之集合的理解與應用

一、Collenction集合 數組和集合的區別 長度 數組的長度是不可變的,集合的長度是可變的 數據類型 數組可以存基本數據類型和引用數據類型 集合只能存引用數據類型,如果要存基本數據類型,需要存對應的包裝類 Collection 集合概述和使用 Collection集合概述?&#xff1a; 是單…

構建安全的GenAI/LLMs核心技術解密之大模型對抗攻擊(二)

構建安全的GenAI/LLMs核心技術解密之大模型對抗攻擊(二) LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA …

Django接口卡死一直沒有返回響應

當Django接口出現卡死且沒有返回響應時&#xff0c;可能是由于多種原因導致的。以下是一些排查和解決問題的步驟&#xff1a; 查看日志&#xff1a; 首先檢查Django的日志&#xff0c;看看是否有任何錯誤或異常被記錄。這可以幫助你確定問題的根源。 檢查數據庫連接&#xff1…

【漏洞復現】泛微OA E-Cology GetLabelByModule SQL注入漏洞

漏洞描述&#xff1a; 泛微OA E-Cology是一款面向中大型組織的數字化辦公產品&#xff0c;它基于全新的設計理念和管理思想&#xff0c;旨在為中大型組織創建一個全新的高效協同辦公環境。泛微OA E-Cology getLabelByModule存在SQL注入漏洞&#xff0c;允許攻擊者非法訪問和操…

使用庫進行Linux下串口收發通信(最簡單沒有之一)的記錄

c-periphery 是一個小型 C 庫,用于用戶空間 Linux 中的 GPIO、LED、PWM、SPI、I2C、MMIO 和串行外設 I/O 接口訪問。 c-periphery 簡化并整合了原生 Linux API 到這些接口。 c-periphery 在嵌入式 Linux 環境(包括 Raspberry Pi、BeagleBone 等平臺)中與外部外設連接非常有…

orangepi-5b 使用 rknn-toolkit2 實測

orangepi-5b 使用 rknn-toolkit2 實測 主機環境&#xff1a;ubuntu20.04 x86_64 開發板 orangepi-5b 4G ram 32G emmc 網站介紹 http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-5B.html 基于rk3588s 所以我們使用 rknn-toolkit2 st…

【SAP HANA 32】HANA中distinct和having去重比較

目錄 1、DISTINCT 2、HAVING 3、性能對比 3.1、查詢復雜度 3.2、查詢優化 3.3、內存使用</

colab使用本地數據集微調llama3-8b模型

在Google的Colab上面采用unsloth,trl等庫&#xff0c;訓練數據集來自Google的云端硬盤&#xff0c;微調llama3-8b模型&#xff0c;進行推理驗證模型的微調效果。 保存模型到Google的云端硬盤可以下載到本地供其它使用。 準備工作&#xff1a;將訓練數據集上傳到google的云端硬盤…

字典(dict)

1.概念 列表和元組的使用缺點&#xff1a;當存儲的數據要動態添加、刪除的時候&#xff0c;我們一般使用列表&#xff0c;但是列表有時會遇到一些麻煩 解決方案&#xff1a;既能存儲多個數據&#xff0c;還能在訪問元素的很方便的定位到需要的元素&#xff0c;采用字典 語法…

[數據集][目標檢測]結直腸息肉內鏡圖像病變檢測數據集13524張2類別

數據集共分為2個版本&#xff0c;即A版和B版&#xff0c;兩個版本圖片數一樣&#xff0c;數據集圖片不存在重疊文件名也不存在重復&#xff0c;可以合并訓練&#xff0c;也可以單獨訓練。 下面是信息介紹&#xff1a; 結直腸息肉內鏡圖像病變檢測數據集13524張2類別A版 數據…

Elasticsearch的并發控制策略

文章目錄 利用external對版本號進行外部控制利用if_seq_no和if_primary_term作為唯一標識來避免版本沖突 ES中的文檔是不可變更的。如果你更新一個文檔,會將就文檔標記為刪除,同時增加一個全新的文檔。同時文是的version字段加1內部版本控制 If_seq_no If_primary_term 使用外…

【Entity Framework】聊聊EF中復雜查詢運算符

【Entity Framework】聊聊EF中復雜查詢運算符 文章目錄 【Entity Framework】聊聊EF中復雜查詢運算符一、概述二、聯接三、GroupJoin四、SelectMany4.1/集合選擇器不引用外部4.2/集合選擇器引用 where 子句中的外部 五、GroupBy六、Left Join七、總結 一、概述 語言集成查詢 (…

使用Xterm實現終端構建

————html篇———— // 需要使用Xterm Xterm的官網&#xff1a; Xterm.js 新建項目 增加基本文件 下載 框架 npm init -y Xterm依賴 npm install xterm/xterm 參考文檔寫的代碼 貼入代碼 <html><head><link rel"stylesheet" href"nod…

免費思維13招之十三:種群型思維

免費思維13招之十三&#xff1a;種群型思維 免費思維的最后一個思維——族群思維 人&#xff0c;都是群居性的動物&#xff0c;在人群中的一部分人群對于另一部分人群來說&#xff0c;具有強大的吸引力。那么&#xff0c;我們就從這一點出發&#xff0c;通過對其中一部分人群進…