數據結構和算法(九)--紅黑樹

一、紅黑樹

1、紅黑樹

? ? 前面介紹了2-3樹,可以看到2-3樹能保證在插入元素之后,樹依然保持平衡狀態,它的最壞情況下所有子結點都是2-結點,樹的高度為IgN,相比于我們普通的二叉查找樹,最壞情況下樹的高度為N,確實保證了最壞情況下的時間復雜度,但是2-3樹實現起來過于復雜,所以我們介紹一種2-3樹思想的簡單實現:紅黑樹
? ? 紅黑樹主要是對2-3樹進行編碼,紅黑樹背后的基本思想是用標準的二叉查找樹(完全由2-結點構成)和一些額外的信息(替換3-結點)來表示2-3樹。我們將樹中的鏈接分為兩種類型:
? ? ? ? 紅鏈接:將兩個2-結點連接起來構成一個3-結點,

? ? ? ? 黑鏈接:則是2-3樹中的普通鏈接。
? ? 確切的說,我們將3-結點表示為由由一條左斜紅色鏈接(兩個2-結點其中之一是另一個的左子結點)相連的兩個2-結點。這種表示法的個優點是,我們無需修改就可以直接使用標準的二叉查找樹的get方法。

1.1、紅黑樹的定義

紅黑樹是含有紅黑鏈接并滿足下列條件的二叉查找樹:
? ? 1、紅鏈接均為左鏈接;
? ? 2、沒有任何一個結點同時和兩條紅鏈接相連;
? ? 3、該樹是完美黑色平衡的,即任意空鏈接到根結點的路徑上的黑鏈接數量相同;
下面是紅黑樹與2-3樹的對應關系:

1.2、紅黑樹結點API

? ? 因為每個結點都只會有一條指向自己的鏈接(從它的父結點指向它),我們可以在之前的Node結點中添加一個布爾類型的變量color來表示鏈接的顏色。如果指向它的鏈接是紅色的,那么該變量的值為true,如果鏈接是黑色的,那么該變量的值為false。

API設計:

類名Node<Key,Value>
構造方法Node(Key key, Value value, Node left, Node right , boolean color):創建Node對象
成員變量1.public Node left:記錄左子結點
2.public Node right:記錄右子結點
3.public Key key:存儲鍵
4.public Value value:存儲值
5.public boolean color:由其結點指向它的鏈接的顏色

代碼:

public class Node<Key, Value> {//存儲鍵public key key;//存儲值private value value;//記錄左子結點public Node left;//記錄右子結點public Node right;//由其父結點指向它的鏈接的顏色public boolean color;public Node(Key key, Value value, Node left, Node right, boolean color) {this.key = key;this.value = value;this.left = left;this.right = right;this.color = color;}
}

1.3、平衡化

? ? 在對紅黑樹進行一些增刪改查的操作后,很有可能會出現紅色的右鏈接或者兩條連續紅色的鏈接,而這些都不滿足紅黑樹的定義,所以我們需要對這些情況通過旋轉進行修復,讓紅黑樹保持平衡

1.3.1、左旋

? ? 當某個結點的左子結點為黑色,右子結點為紅色,此時需要左旋

前提:當前結點為h,它的右子結點為x;

左旋過程:
? ? 1、讓x的左子結點變為h的右子結點:h.right=x.left;
? ? 2、讓h成為x的左子結點:x.left=h;
? ? 3、讓h的color屬性變為x的color屬性值:x.color=h.color;
? ? 4、讓h的color屬性變為RED:h.color=true;

1.3.2、右旋

? ? 當某個結點的左子結點是紅色,且左子結點的左子結點也是紅色,需要右旋。

前提:當煎結點為h,它的左子結點為x;

右旋過程:
? ? 1、讓x的右子結點成為h的左子結點:h.left=x.right;
? ? 2、讓h成為x的右子結點:x.right=h;
? ? 3、讓x的color變為h的color屬性值:x.color =h.color;
? ? 4、讓h的color為RED ;

數據結構和算法(一)

數據結構和算法(八)--2-3查找樹

數據結構--棧、隊列、鏈表、散列表、排序二叉樹

再小的努力,乘以365都很明顯!
每天??記錄?點點。內容也許不重要,但習慣很重要!
一個程序員最重要的能力是:寫出高質量的代碼!!
有道無術,術尚可求也,有術無道,止于術。
無論你是年輕還是年長,所有程序員都需要記住:時刻努力學習新技術,否則就會被時代拋棄!

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

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

相關文章

工業攝像頭通過USB接口實現圖像

工業攝像頭系列概覽&#xff1a;類型與應用 工業攝像頭系列涵蓋了多種類型&#xff0c;以滿足不同行業和應用的需求。以下是對工業攝像頭系列的一些介紹&#xff1a; 一、主要類型與特點 USB工業攝像頭 &#xff1a;這類攝像頭通常通過USB接口與計算機連接&#xff0c;適用于…

使用Django框架表單

使用Django框架表單 文章目錄 使用Django框架表單[toc]1.使用Form類構建表單2.表單字段與Widget控件 1.使用Form類構建表單 【創建項目和應用】 PS C:\Users\ls> cd E:\Python\ PS E:\Python> django-admin.exe startproject FormSite PS E:\Python> cd .\FormSite\…

docker配置mysql遇到的問題:網絡連接超時、啟動mysql失敗、navicat無法遠程連接mysql

目錄 1.網絡超時 方式1. 網絡連接問題 方式2. Docker鏡像源問題 方式3.使用國內鏡像源 2.啟動mysql鏡像失敗 3.navicat無法遠程連接mysql 1.網絡超時 安裝MySQL時出現超時問題&#xff0c;可能由多種原因導致&#xff1a; 方式1. 網絡連接問題 原因&#xff1a;網絡不穩定…

React 多語言國際化:實現多語言支持

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

Claude系列模型-20250426

文章目錄 Claude 3.7 Sonnet - "Our most intelligent model yet"Claude 3.5 Haiku - "Fastest model for daily tasks"Claude 3.5 Sonnet (Oct 2024)Claude 3 Opus總結Claude 3.7 Sonnet - “Our most intelligent model yet” 特點: 這是目前Claude系列…

Linux查看可用端口號碼命令

在Linux系統中&#xff0c;有多種命令可用于查看可用端口號碼&#xff0c;下面為你詳細介紹&#xff1a; 1. 使用netstat命令 netstat是一個功能強大的網絡工具&#xff0c;可用于顯示網絡連接、路由表和網絡接口等信息。你可以結合不同的選項來查看端口使用情況。 查看所有…

leetcode201.數字范圍按位與

找到公共前綴部分&#xff0c;然后后面的部分全0 class Solution {public int rangeBitwiseAnd(int left, int right) {int offset 0;while (left ! right) {offset;left left >> 1;right right >> 1;}return right << offset;} }

端到端自動駕駛的數據規模化定律

25年4月來自Nvidia、多倫多大學、NYU和斯坦福大學的論文“Data Scaling Laws for End-to-End Autonomous Driving”。 自動駕駛汽車 (AV) 棧傳統上依賴于分解方法&#xff0c;使用單獨的模塊處理感知、預測和規劃。然而&#xff0c;這種設計在模塊間通信期間會引入信息丟失&am…

021-C語言文件操作

C語言文件操作 文章目錄 C語言文件操作1. 文件的概念2. 二進制文件和文本文件3. 文件的打開和關閉3.1 流和標準流3.1.1 流3.1.2 標準流 3.2 文件指針3.3 文件的打開和關閉 4. 文件的順序讀寫4.1 順序讀寫函數4.2 對比兩組函數4.2.1 scanf/fscanf/sscanf4.2.2 printf/fprintf/sp…

如何使用@KafkaListener實現從nacos中動態獲取監聽的topic

1、簡介 對于經常需要變更kafka主題的場景&#xff0c;為了實現動態監聽topic的功能&#xff0c;可以使用以下方式。 2、使用步驟 2.1、添加依賴 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactI…

《TCP/IP詳解 卷1:協議》之第七、八章:Ping Traceroute

目錄 一、ICMP回顯請求和回顯應答 1、ICMP回顯請求 2、ICMP回顯應答 二、ARP高速緩存 三、IP記錄路由選項&#xff08;Record Route&#xff0c;RR&#xff09; 1、記錄路由選項的工作過程 2、RR 選項的 IP 頭部格式 2.1、RR 請求 2.2、RR響應 四、ping 的去返路徑 五…

30天通過軟考高項-第四天

30天通過軟考高項-第四天 任務&#xff1a;項目進度管理 思維導圖閱讀 知識點集錦閱讀 知識點記憶 章節習題練習 知識點練習 手寫回憶ITTO 聽一遍喜馬拉雅關于范圍的內容 進度管理-背 1. 過程定義 龜腚排池至控 規劃進度管理&#xff1a;為了規劃、編制、管理…

根據JSON動態生成表單表格

根據JSON動態生成表單表格 一. 子組件 DynamicFormTable.vue1,根據JSON數據動態生成表單表格,支持表單驗證JS部分1.1,props數據1.2,表單數據和數據監聽1.3,自動驗證1.4,表單驗證1.5,獲取表單數據1.6,事件處理1.7,暴露方法給父組件2,HTML部分二,父組件1, 模擬數據2,…

【趙渝強老師】快速上手TiDB數據庫

從TiDBv4.0起&#xff0c;提供了包管理工具TiUP&#xff0c;負責管理TiDB、PD、TiKV等組件。用戶只需通過TiUP命令即可運行這些組件&#xff0c;顯著降低了管理難度。TiUP程序只包含少數幾個命令&#xff0c;用來下載、更新、卸載組件。TiUP通過各種組件來擴展其功能。組件是一…

springboot入門-DTO數據傳輸層

在 Spring Boot 應用中&#xff0c;DTO&#xff08;Data Transfer Object&#xff0c;數據傳輸對象&#xff09; 是專門用于在不同層&#xff08;如 Controller 層、Service 層、外部系統&#xff09;之間傳輸數據的對象。它的核心目的是解耦數據模型和業務邏輯&#xff0c;避免…

安裝docker,在docker上安裝mysql,docker上安裝nginx

目錄 一.安裝docker 1.1查看Linux版本的命令這里推薦兩種&#xff1a; 1.2查看內核版本有三種方式&#xff1a; 2.安裝 2.1 如果之前安裝了docker&#xff0c;先刪除舊版本的doker 2.2 安裝需要的軟件包&#xff0c;yum-util提供yum-config-manager功能&#xff0c;另外兩…

Android killPackageProcessesLSP 源碼分析

該方法用于終止指定包名/用戶ID/應用ID下符合條件的應用進程&#xff0c;涉及多進程管理、資源凍結、進程清理及優先級更新等操作。核心流程分為進程篩選、資源凍結、進程終止與資源恢復三個階段。 /*** 從已排序的進程列表中&#xff0c;提取從指定起始索引 startIdx 開始的連…

openAICEO山姆奧特曼未來預測雄文之三個觀察

《三個觀察》 山姆奧特曼 這篇文章主要講的是關于AGI&#xff08;人工通用智能&#xff09;的未來發展及其對社會的影響&#xff0c;用大白話總結如下&#xff1a; 核心觀點&#xff1a; AGI是什么&#xff1f; AGI是一種能像人類一樣解決各種復雜問題的智能系統&#xff0c;比…

部署yolo到k230教程

訓練&#xff1a;K230 借助 AICube部署AI 視覺模型 YOLO等教程_嘉楠 ai cube多標簽分類-CSDN博客K230模型訓練ai cube報錯生成部署文件異常_aicube部署模型顯示生成部署文件異常-CSDN博客 部署&#xff1a; # 導入必要的庫和模塊 import os import ujson # 超快的JS…

Flask 應用封裝成 Docker 服務的完整技術指南

一、實現原理 容器化核心邏輯 Docker 通過將應用代碼、運行環境和依賴項打包成鏡像&#xff0c;實現環境一致性。Flask 應用容器化需包含&#xff1a; Python 基礎運行環境項目代碼及依賴庫&#xff08;requirements.txt&#xff09;WSGI服務器&#xff08;如 Gunicorn&#xf…