7.3.3_1紅黑樹的定義和性質

知識總覽:

為什么要發明紅黑樹:

二叉排序樹BST

紅黑樹RBT的查找、插入和刪除效率基本和AVL平衡二叉樹的相同,但是平衡二叉樹在插入和刪除節點操作時容易被破壞平衡,所以需要消耗大量時間重新調整樹的形態(主要時間用在計算平衡因子,找最小不平衡樹等),而紅黑樹在插入和刪除操作時就不需要頻繁調整樹的形態,即便需要調整,一般也可在常數級完成,所以紅黑樹很牛

一般查詢多,插入刪除少的用平衡二叉樹,如果是插入、刪除多的用紅黑樹

j?

紅黑樹定義:

紅黑樹是二叉排序樹的一種優化,則紅黑樹有二叉排序樹BST的特性,即節點值左子樹<根節點<右子樹(左<中<右)?,每個節點上除了有左子孩子指針外,還有節點的顏色color

定義:

1.紅黑樹的節點的顏色要么是黑色要么是紅色

2.紅黑樹中的葉節點一般指的是查找失敗的節點,葉節點又叫NULL空節點或者外部節點,注意不是最下層的節點,二叉排序樹中的查找失敗的節點也是NULL節點即不存在的節點,根節點和葉節點一定都是黑色的節點

4.紅黑樹中的父子節點不能出現連續的紅節點,但是如果是兄弟節點可以是連續的紅節點,如下圖3,節點17是紅節點,則它的父節點13和孩子節點15和25必須都是黑節點,否則就出現連續的紅節點了,如果15節點是紅節點,則不滿足紅黑樹定義,22和27是兄弟節點可以是連續紅節點

5.從任一節點(包括根節點)出發,該節點到任一葉節點的有各種各樣的路徑,但是不管是啥路徑,在各個路徑上所經過的黑節點的個數是相同的。如下從13出發可以到達各個葉節點,13->8->1->null,13->8->11->null,13->17->15->null等等路徑,所經過的黑節點個數都是2(注意從某個節點出發所經過的黑節點數量不包括出發節點,即便是從該節點出發該節點是黑節點,那也不包括),以上路徑所經過的黑節點依次是(1,null)、(11,null)、(15,null)即都是2個黑節點

紅黑樹口訣:

左根右======》指的是滿足節點值左子樹<根節點<右子樹

根葉黑======》指的是根節點和葉子節點都是黑節點

不紅紅======》指的是父子節點不存在2個相鄰的紅節點

黑路同======》指的是一條路走到黑,走到葉子節點(葉子節點是黑的),所包含的黑節點數目相同

平衡二叉樹AVL也是二叉排序樹的一種優化,AVL每個節點上除了有左右孩子指針外,還有平衡因子

練習:

如下截圖中分別違反不紅紅(父子節點2個紅節點不能相鄰)和根葉黑要求(根節點是黑色的)、黑路同(從1節點出發到葉子黑節點,經過的黑節點數目分別為1和2),即不符合紅黑樹要求

?

補充概念:節點的黑高

黑高bh定義: 從某一節點出發(不包含該節點)到達任一空葉節點的路徑上的黑節點的數目(跟上邊的紅黑樹的黑路同特性類似)

如下15節點的bh=2,即15->11->8->null(黑節點為11和NULL節點)或者15->18->null(黑節點為18和和NULL節點)等等在到達葉節點上的路徑上的黑節點的數目都是2,根節點6bh=2同,6->2->null(黑節點為2、NULL節點)或者6->15->18->20->null(黑節點為18、NULL節點)等等路徑的黑節點的數目=2

?紅黑樹的性質:

1.從根節點到葉節點的最長路徑不大于最短路徑的2倍(這個是因為不允許2個紅節點相鄰出現,所以最長路勁肯定是紅黑交叉的路徑,所以最長路徑不大于最短路徑的2倍。。。。可能是吧。。)

2.有n個內部節點的紅黑樹高度h<=2log2(n+1),即紅黑樹的查找效率為log2n數量級,即紅黑樹的查找時間復雜度為O(log2n)

紅黑樹的查找:因為紅黑樹也是二叉排序樹,所以查找和二叉排序樹一樣,從根節點出發,左小右大,若找到空葉節點則查找失敗

知識回顧:

?

又水一篇。。。。。。。。。。。。。?

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

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

相關文章

微處理器原理與應用篇---馮諾依曼體系結構

馮諾依曼體系結構&#xff1a;計算機的基礎設計范式 一、馮諾依曼體系結構的起源與定義 提出背景&#xff1a; 1945 年&#xff0c;匈牙利數學家約翰?馮?諾依曼&#xff08;John von Neumann&#xff09;在《EDVAC 報告書的第一份草案》中提出該架構&#xff0c;為現代計算…

vue3 + TypeScript +Element Plus 輸入框回車事件 @keydown.enter

在 Vue 3 TypeScript Element Plus 的環境下&#xff0c;keyup.enter.native 和 keydown.enter 在 el-input 組件上的區別主要在于 事件觸發時機 和 Vue 3 的事件處理機制。以下是詳細對比&#xff1a; 1. keydown.enter&#xff08;推薦&#xff09; 觸發時機&#xff1a;當…

android gradle的優化

在setting.gradle.kts配置 google()maven("https://maven.aliyun.com/repository/google")// 官方 Maven Central&#xff0c;最通用mavenCentral()// 特殊倉庫&#xff08;4thline&#xff0c;Cling 用&#xff09;maven {url uri("http://4thline.org/m2&q…

jmeter工具簡單認識

2025最新Jmeter接口測試從入門到精通&#xff08;全套項目實戰教程&#xff09; 一、JMeter 介紹 Apache JMeter是100%純JAVA桌面應用程序&#xff0c;被設計為用于測試客戶端/服務端結構的軟件(例如web應用程序)。它可以用來測試靜態和動態資源的性能&#xff0c;例如&#xf…

Rail 分析的實現思路(python)(1)

本文適用于 Rail 0.1 版本. 工作:輸入Rial文件的路徑,識別詞元,輸出實例列表. 是一邊寫代碼一邊寫文章的,所以有時候改了原本的代碼不一定會說.以思路為中心. Rail是一種信息分布與細節構成的表示語言。詳見參考文檔. 關于本文的分析對象&#xff0c;參考邏輯行的類型. 從源文…

【JAVA】數組的使用

文章目錄 前言一、數組的基本概念1.1 數組的創建和初始化1.2 數組的基本使用 二、數組是引用類型2.1 初始JVM的內存分布JVM內存劃分&#xff08;按功能分區&#xff09; 2.2 基本類型變量與引用類型變量的區別2.3 再談引用變量2.4 認識null 三、數組作為函數的參數和返回值四、…

Python圖像處理與計算機視覺:OpenCV實戰指南

引言 在當今數字化時代&#xff0c;圖像處理和計算機視覺技術已經滲透到我們生活的方方面面&#xff0c;從智能手機的人臉識別解鎖&#xff0c;到自動駕駛汽車的路況感知&#xff0c;再到醫療影像輔助診斷系統。作為這一領域最流行的開源庫之一&#xff0c;OpenCV (Open Sourc…

OCCT基礎類庫介紹:Modeling Algorithm - Features

Features 特征 This library contained in BRepFeat package is necessary for creation and manipulation of form and mechanical features that go beyond the classical boundary representation of shapes. In that sense, BRepFeat is an extension of BRepBuilderAPI …

【前端AI實踐】DeepSeek:開源大模型的使用讓開發過程不再抓頭發

有時候你可能正對著屏幕發呆&#xff0c;不知道怎么下手一個 Vue 的流式請求功能。這時候&#xff0c;DeepSeek 就像是你的“編程外掛”&#xff0c;幫你把模糊的需求變成清晰的代碼。 下面我們就以幾個常見的開發場景為例&#xff0c;看看 DeepSeek 能幫我們做點啥。 解答技…

SAP S/4HANA 的“Smart Core”:在現實與理想之間實現敏捷擴展

摘要&#xff1a; 在 SAP S/4HANA 的實施過程中&#xff0c;“Clean Core”&#xff08;干凈核心&#xff09;已成為熱門話題&#xff0c;指的是通過簡化和優化系統架構&#xff0c;減少技術債務、提升性能并增強可升級性。盡管這是 SAP 推動云轉型的核心理念之一&#xff0c;…

Python 量化金融與算法交易實戰指南

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 金融數據獲取與處理 使用yfinance獲取市場數據 python 復制 下載 import yfinance as yf import pandas as pd# 下載蘋果公司股票數據 aapl yf.Ticker("AAPL") hist aapl.histo…

【StarRocks系列】join查詢優化

目錄 Join 類型 和 Join 策略 1. Join 類型&#xff08;Join Type&#xff09; 2. Join 策略&#xff08;Join Strategy&#xff09; 分布式 Join 策略 (核心) 1. Colocate Join (本地 Join - 最優): 2. Bucket Shuffle Join: 3. Broadcast Join (復制廣播): 4. Shuffl…

【論文解讀】ZeroSearch: 零API成本激活大模型Web搜索

1st author: Hao Sun 孫浩 - PhD Candidate Peking University - Homepage paper: [2505.04588] ZeroSearch: Incentivize the Search Capability of LLMs without Searching code: Alibaba-NLP/ZeroSearch: ZeroSearch: Incentivize the Search Capability of LLMs without…

JAVA網絡編程中HTTP客戶端(HttpURLConnection、Apache HttpClient)

HTTP 客戶端是 Java 中實現網絡請求的核心工具,主要用于與 Web 服務器交互(如獲取網頁、提交表單、調用 REST API 等)。Java 生態中有兩種主流的 HTTP 客戶端實現:??HttpURLConnection(JDK 原生)?? 和 ??Apache HttpClient(第三方庫)??。以下是兩者的詳細解析、…

C# Process.Start多個參數傳遞及各個參數之間的空格處理

最近做一個軟件集成的事情&#xff0c;有多個之前做的軟件&#xff0c;集成到一起自己用&#xff0c;使用了 Process.Start&#xff08;“*.exe”&#xff09;的方式&#xff0c;然而遇到了傳遞參數的問題。 這里匯總后的程序叫main.exe&#xff0c;要匯總的軟件之一是pro1.…

【Python】Excel表格操作:ISBN轉條形碼

一、效果 原始文件&#xff1a; 輸出文件&#xff1a; 二、代碼 import os import logging from openpyxl import load_workbook from openpyxl.drawing.image import Image as ExcelImage from barcode import EAN13 from barcode.writer import ImageWriterlogging.basicCo…

【Fargo】mediasoup發送2:碼率分配、傳輸基類設計及WebRtcTransport原理

Fargo 使用了mediasoup的代碼,搬運了他的架構架構精妙,但是似乎是為了sfu而生,【Fargo】mediasoup發送1:控制與數據分離的分層設計和原理我本地用來發送測試,因此需要進一步梳理: 通過分析這段代碼,我來詳細解釋: 一、sfu 需要碼率級別的分配控制 1. DistributeAvail…

矩陣置零C++

給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 思路&#xff1a; 1、讓首行首列記錄哪一行哪一列有0 2、于是可以直接遍歷非首行首列的元素&#xff0c;若該元素對應的首行首列為0&#xff0c;說明…

大內存對電腦性能有哪些提升

在科技飛速發展的今天&#xff0c;電腦已經成為我們生活和工作中不可或缺的伙伴。無論是日常辦公、追劇娛樂&#xff0c;還是進行復雜的游戲和專業設計&#xff0c;電腦的性能都至關重要。而在影響電腦性能的眾多因素中&#xff0c;內存大小常常被人們忽視。 多任務處理更流暢…

【StarRocks系列】Update語句

目錄 簡要流程 詳細流程 1. UPDATE 語句執行流程 2. 如何更新表的數據 3. 是否支持事務 總結關鍵點 簡要流程 前端處理&#xff08;FE&#xff09;&#xff1a; 解析 SQL 并驗證主鍵條件生成包含主鍵列表和新值的更新計劃按主鍵哈希分發到對應 BE 后端執行&#xff08…