STL源碼剖析 關聯式容器 樹 紅黑樹、二叉搜索樹、平衡二叉搜索樹

  • ?所謂關聯式容器,觀念上類似關聯式數據庫(實際上則簡單許多):每筆數據(每個元素)都有一個鍵值(key)和一個實值(value) 2。當元素被插入到關聯式 容器中時,容器內部結構(可能是RB-tree,也可能是hash-table)便依照其鍵 值大小,以某種特定規則將這個元素放置于適當位置.
  • 關聯式容器沒有所謂頭尾(只有最大元素和最小元素),所以不會有所謂push_back()、push_f ront ()、 pop_back()、pop_f ront () . begin。、end() 這樣的操作行為。
  • 一般而言,關聯式容器的內部結構是一個balanced binary tree (平衡二叉樹),以便獲得良好的搜尋效率.balanced binary tree有許多種類型,包 括 AVL-tree.RB-tree、AA-tree,其中最被廣泛運用于S T L 的是RB-tree (紅黑樹)。為了探討 S T L 的關聯式容器,我必須先探討RB-tree.

  • size 節點數量,包含自身
  • height 葉子節點是0,逐個向上遞增
  • depth 根節點是0,逐個向下遞增
  • length 從根節點到 計算節點之間的邊的個數

二叉搜索數

?

?

?

?

?

?源碼這一塊 已經懵逼

?類似鏈表中的dummptynode,他的作用使得 對于頭結點的操作和其余的節點操作是一致的

  • ?接下來,每當插入新節點時,不但要依照RB-tree的規則來調整,并且維護 header的正確性,使其父節點指向根節點,左子節點指向最小節點,右子節點指 向最大節點。節點的插入所帶來的影響,是下一小節的描述重點。

?

?

?左右子樹高度相差為2時,會進行平衡,賦值僅僅改變顏色即可

?

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

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

相關文章

北京大學 軟件工程1 軟件 軟件工程 軟件開發 軟件工程框架

軟件的定義 重新定義軟件 新一代信息技術 區塊鏈 創造性思維 軟件的特點 軟件的種類 支撐軟件:VC,PyCharm等 應用軟件:QQ,微信 軟件工程的起源 軟件開發的三個階段 軟件工程概念的提出 軟件工程的定義 軟件工程將系統化&#…

java學習_Python基礎學習教程:從0學爬蟲?讓爬蟲滿足你的好奇心

Python基礎學習教程:從0學爬蟲?讓爬蟲滿足你的好奇心有必要學爬蟲嗎?我想,這已經是一個不需要討論的問題了。爬蟲,“有用”也“有趣”!這個數據為王的時代,我們要從這個龐大的互聯網中來獲取到我…

安卓rom制作教程_安卓手機TWRP_Recovery卡刷圖文教程 適用于卡刷ROM,TWRP救磚

掃一掃二維碼,關注我,解決刷機各種疑難雜癥 ROM樂園獨家支持最近有很多小伙伴問怎么去卡刷,卡刷的操作是什么,什么是卡刷,小編就仔細來寫一下卡刷教程吧,記住,我們所說的卡刷,并不是…

東軟 軟件工程1 軟件危機 軟件工程 軟件生命周期

軟件危機 軟件危機產生的原因 消除軟件危機的途徑: 軟件工程歷史 軟件工程的概念 軟件工程項目的基本目標 軟件工程的基本原理 軟件生命周期 軟件工程的中的軟件生命周期

iphone全部機型_iPhone 12 銷量或創 iPhone 6 以來最高|iphone|郭明錤

iPhone 12 系列目前正在預售中,本周五兩款 英寸機型就將正式上市。有不少小伙伴已經成功預購到了首批 iPhone 12,另有一些用戶仍在持幣觀望,等待第三方平臺報出更便宜的價格。而從 iPhone 12 的預售情況來看,兩款 英寸機型還是相當…

東軟 軟件工程2 軟件開發模型 瀑布模型 原型模型 螺旋模型 統一過程模型RUP 敏捷開發模型

軟件開發過程模型 瀑布模型 原型模型 螺旋模型 統一過程模型-RUP 敏捷開發模型 敏捷開發模型:Scrum方法 敏捷開發模型:進行Scrum開發

算法 筆試的時候 如何輸入元素?

/* * 長度 3* 數組 1 2 3* 注意&#xff1a;元素之間以空格相隔 */int length 0;std::cin >> length;getchar();std::vector<int>input_vector{};for (int i 0; i < length; i) {int temp 0;std::cin >> temp;input_vector.emplace_back(temp);} 使…

自動點擊器一秒200_做PPT還需要找模板?用這招3分鐘就能自動排好PPT!

點擊上圖直達活動詳情頁&#xff0c;優惠券超 400 元&#xff01;大家好&#xff0c;我是愛挖神器的潔潔。今天我來跟大家聊聊「PPT里的神器」~我們每次做 PPT 的時候&#xff0c;經常面對的一個難題就是&#xff1a;如&#xff01;何&#xff01;排&#xff01;版 ?比如像這樣…

東軟 軟件工程3 軟件項目管理 團隊組織管理

團隊組織管理 團隊的概念 項目組的組織原則 項目組的組織方式 軟件項目管理過程組

dedecms怎么改php版本_玩轉Termux:手把手教你在手機上安裝php與nginx!

大家好&#xff0c;這里是 「手機編程」&#xff0c;我是作者&#xff1a;舞劍&#xff0c;記得「關注我」今天是Termux系列第三節&#xff0c;我來講講怎么安裝 PHP 與 Mysql&#xff0c;然后用 Termux 搭建一個網站。PHP全球有幾乎95%的網站都使用 php 需要編寫的&#xff0c…

Python學習8 函數 匿名函數 內置函數

轉換相關的方法-eval 轉換相關的方法-json 函數基本語法大綱 函數概念 示例&#xff1a; 題目&#xff1a; 函數的參數 def f(x,y1,*z,**abc):print(x,y,z,abc,sep"\n")f(1,4,5,3,a1,b2,c3) #1 # 4 # (5, 3) # {a: 1, b: 2, c: 3}易錯題&#xff1a; 1&#xff0…

求兩個集合的交集

letcode原題 排序雙指針 如果兩個數組是有序的&#xff0c;則可以使用雙指針的方法得到兩個數組的交集。首先對兩個數組進行排序&#xff0c;然后使用兩個指針遍歷兩個數組。初始時&#xff0c;兩個指針分別指向兩個數組的頭部。每次比較兩個指針指向的兩個數組中的數字&#…

Python學習7 集合Set

區別 集合的基本使用 如果是空集合&#xff0c;使用set {}是字典 pop:無序&#xff0c;隨機刪除一個元素 add添加一個元素 remove移除指定元素 update合并&#xff0c;合并在原集合上 union合并到一個新的集合上 clear清空 總結&#xff1a; 集合運算 補集&#xff1a; f…

cad怎么快速算面積_用cad算面積的快捷鍵方法步驟詳細,大朗CAD培訓班

在繪圖的過程中經常需要查詢和計算圖形的面積&#xff0c;網上有不少人問這方面的問題。都市領航教育將計算面積的方法和相關命令整理一下&#xff0c;希望對初學者有幫助。 查詢圖形的面積 我們利用邊界或編輯多段線命令生成了多段線和面域&#xff0c;不需要再使用查詢面積命…

給定沒有重復數字的序列,將其全排列

leetcode題目 void backtrack(vector<vector<int>>& res, vector<int>& output, int first, int len){if (firstlen){res.push_back(output);}for (int i first; i < len; i) {std::swap(output[first],output[i]);backtrack(res,output,first1,…

Java web后端4 會話 Cookie Session

會話 會話&#xff1a;指的是一個客戶端&#xff08;瀏覽器&#xff09;與Web服務器之間連續發生的一系列請求和響應的過程。 客戶端和服務器的請求和響應的過程&#xff08;對話雙方只要有一方發生變化&#xff0c;都屬于不同的會話&#xff09; 超時間隔【距離上一次請求的…

將安全信息應用到以下對象時發生錯誤 拒絕訪問_手機資訊:拒絕「京東金融」事件再次發生|如何避免iPhone 應用私自獲取照片...

如今使用IT數碼設備的小伙伴們是越來越多了&#xff0c;那么IT數碼設備當中是有很多知識的&#xff0c;這些知識很多小伙伴一般都是不知道的&#xff0c;就好比最近就有很多小伙伴們想要知道拒絕「京東金融」事件再次發生|如何避免iPhone 應用私自獲取照片&#xff0c;那么既然…

走臺階一共有多少種走法

可以走1臺階 2臺階 3臺階 long long MoveStairs(int total){if (total < 4) {return total 3 ? 4 : total;}int a 1, b 2, c 4;for (int i 4; i < total; i) {int temp (a b) % 1000000007 c;a b;b c;c temp % 1000000007;}return c; }

C/C++藍橋杯1 備賽準備

藍橋杯信息 算法基礎學習 1.學習C基礎語法 2. 3.做藍橋杯的真題 賽題&#xff1a;情況 賽題&#xff1a;國賽 賽題&#xff1a;暴力數學練習 暴力的題目類型