【數據結構】19 平衡二叉樹

定義

平衡二叉樹又稱為AVL樹,是具有以下性質的非空搜索樹:

  1. 任一結點的左、右子樹均為AVL樹。
  2. 根節點的左、右子樹高度差的絕對值不超過1.

對于二叉樹的任一結點T,其平衡因子(BF)定義為BF(T)= h L ? h R h_L- h_R hL??hR? h L h_L hL? h R h_R hR?分別是T的左、右子樹的高度。故AVL樹的平衡因子只能在{-1,0,1}中取值。

平衡樹的調整

當向一顆AVL樹插入新的結點時,該節點的平衡因子可能不在上述集合分為內。 這時需要做出”平衡化“處理,即相應的局部旋轉調整,時調整后的樹達到平衡。

單旋調整

右單旋(RR)

如圖,在第三個節點插入后,根節點mar的平衡因子為-2,樹不平衡。需要將樹做逆時針旋轉。
#在這里插入圖片描述
一般情況如下圖所示,在A的右節點B的右子樹里插入C,使得A的平衡因子變為-2,這時我們需要逆時針旋轉相關節點,把B至于A的位置,A置為B的子節點。若B有左子樹,將B的左子樹置為A的右子樹。
在這里插入圖片描述

左單旋(LL)

一般情況下,在A節點的左節點B的左子樹下插入C節點后導致A節點不平衡,需要順時針旋轉相應節點,將B節點替代A節點位置,將A節點置為B的右節點,若B有右子樹,則將B的右子樹作為A的左節點。
在這里插入圖片描述

雙旋調整

LR型

在A節點的左節點B的右子樹(以C為根節點)下插入D,稱為LR型不平衡。調整方式為將C至于A的位置,A及其右子樹調整為C的右子樹,C的左子樹作為B的右子樹,C的右子樹作為A的左子樹。

事實上,這一調整也可以視為對以B節點為根的子樹做一次右單旋,再對以A為根節點的子樹做一次左單旋。
在這里插入圖片描述

RL型

在A節點的右節點B的左子樹(以C為根節點)下插入D,稱為RL型不平衡。
調整方法為C替代A的位置,A以及A的左子樹作為C的左子樹,C的左子樹為A 的右子樹,C的右子樹作為B 的左子樹。

事實上,這一調整也可以視為對以B節點為根的子樹做一次左單旋,再對以A為根節點的子樹做一次右單旋。
在這里插入圖片描述

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

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

相關文章

acwing算法提高之搜索--雙向廣搜BFS與A星算法

目錄 1 專題說明2 訓練 1 專題說明 本專題用來記錄使用雙向廣搜BFS和A星算法求解的題目。 2 訓練 題目1&#xff1a;190字串變換 考點&#xff1a;從起點開始搜&#xff0c;從終點開始搜&#xff0c;即雙向廣搜。 C代碼如下&#xff0c; #include <iostream> #incl…

攻防世界-get_post

題目信息 相關知識 -G&#xff1a;表示GET請求&#xff0c;缺省POST -d參數用于發送 POST 請求的數據體 使用-d參數以后&#xff0c;HTTP 請求會自動加上標頭Content-Type : application/x-www-form-urlencoded。并且會自動將請求轉為 POST 方法&#xff0c;因此可以省略-X PO…

使用GPTQ進行4位LLM量化

使用GPTQ進行4位LLM量化 最佳腦量化GPTQ算法步驟1:任意順序洞察步驟2:延遲批量更新第三步:喬爾斯基重塑 用AutoGPTQ量化LLM結論References 權重量化的最新進展使我們能夠在消費級硬件上運行大量大型語言模型&#xff0c;例如在RTX 3090 GPU上運行LLaMA-30B模型。這要歸功于性能…

信息收集2.0版本

內網滲透之信息收集 whois查詢 1.1.1.1. 在線網站查詢 輸入相關的域名即可進行查詢。 &#xff08;1&#xff09;站長之家&#xff1a;whois域名查詢&#xff1a;http://whois.chinaz.com/ &#xff08;2&#xff09;愛站工具網&#xff1a;whois域名查詢&#xff1a;站長…

mysql數據庫操作小寄巧

目錄 json字段查詢時間相關只有日期只有時間又有時間又有日期時間比較時間運算 某字段同的取最新數據&#xff08;軟性的新數據覆蓋舊數據查找&#xff09;sql_modeonly_full_group_by的解決辦法優化思路 json字段查詢 查詢某個json字段&#xff08;xx&#xff09;的某個屬性下…

【考研數學】零基礎備考全年計劃

25考研數學基礎差&#xff0c;一定要重視基礎的復習&#xff01; 基礎不牢&#xff0c;地動山搖&#xff0c;這句話在如今的考研更加貼切 24考研的新形勢&#xff1a; 重基礎、計算量大、反押題 每一個變化對于基礎差的同學都不是好消息。 做過近幾年考研真題的人都會發現…

AI時代編程新寵!如何讓孩子成為未來的編程大師?

文章目錄 一、了解編程的基礎概念二、選擇適合的編程工具三、激發孩子的興趣四、注重基礎能力的培養五、提供實踐機會六、鼓勵孩子與他人合作七、持續支持與鼓勵《信息學奧賽一本通關》本書定位內容簡介作者簡介目錄 隨著科技的迅猛發展&#xff0c;編程已經從一種專業技能轉變…

Java實戰:PO、VO、DAO、BO、DTO與POJO在何處何場景下精準應用?

引言 在Java企業級應用開發中&#xff0c;良好的架構設計和清晰的數據模型劃分是保證代碼可讀性、可維護性和擴展性的基石。本文將深入剖析Java開發中常見的六大對象模型——PO&#xff08;Persistent Object&#xff09;、VO&#xff08;Value Object&#xff09;、DAO&#…

代碼隨想錄第二十五天 78.子集 90.子集II 491.非遞減子序列

LeetCode 78 子集 題目描述 給你一個整數數組 nums &#xff0c;數組中的元素 互不相同 。返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3] 輸出&…

24計算機考研 | 渤海大學

渤海大學丨省重點實驗室24年碩士招生&#xff08;調劑&#xff09; 考研調劑招生信息 學校:渤海大學 專業:工學->化學工程與技術->化學工藝 工學->材料科學與工程->材料學 工學->化學工程與技術->應用化學 工學->計算機科學與技術->計算機應用技…

iOS卡頓原因與優化

iOS卡頓原因與優化 1. 卡頓簡介 卡頓&#xff1a; 指用戶在使用過程中出現了一段時間的阻塞&#xff0c;使得用戶在這一段時間內無法進行操作&#xff0c;屏幕上的內容也沒有任何的變化。 卡頓作為App的重要性能指標&#xff0c;不僅影響著用戶體驗&#xff0c;更關系到用戶留…

Maven插件之 maven-dependency-plugin 分析依賴復制文件

目錄 插件簡介使用示例配置依賴&#xff1a;執行 mvn dependency:analyze輸出結果&#xff1a; 結尾 插件簡介 Apache Maven Dependency Plugin是Apache Maven構建工具的一個插件&#xff0c;用于管理項目的依賴項。 該插件提供了一系列目標&#xff08;goals&#xff09;&…

Linux: shm_xx系列函數使用詳解

目錄 一、shmget/shmctl/shmat/shmdt函數1、shmget2、shmctl3、shmat4、shmdt5、補充&#xff1a;ftok函數6、示例代碼 二、shm_open/shm_unlink函數1、shm_open2、shm_unlink3、示例代碼 三、課外閱讀 一、shmget/shmctl/shmat/shmdt函數 shm_xx系列函數是用于操作共享內存的一…

SpringBoot整合JdbcTemplate

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人???? ??個人主頁:Leo的博客 ??當前專欄: 循序漸進學SpringBoot ?特色專欄: MySQL學習 ??本文內容:SpringBoot整合JdbcTemplate ??個人知識庫: Leo知識庫,歡迎大家訪問 目錄 …

設置文字之間的間距應該如何實現

設置文字之間的間距&#xff0c;通常指的是字母之間&#xff08;字符間距&#xff09;或單詞之間的間距。在CSS中&#xff0c;這可以通過letter-spacing和word-spacing屬性來實現。 字符間距&#xff08;letter-spacing&#xff09; letter-spacing屬性用于調整字符之間的間距…

【Git學習筆記】提交PR

step1 克隆一個倉庫 git clone .....step2 創建一個分支 (Creating a branch) # 創建并切換到本地新分支&#xff0c;分支的命名盡量簡潔&#xff0c;并與解決的問題相關 git checkout -b delete-unused-linkstep3 做出修改 (Make changes) step4 提交修改 # 保存本地修…

DDR5內存相比DDR4內存的優勢和區別?選擇哪一個服務器內存配置能避免丟包和延遲高?

根據幻獸帕魯服務器的實際案例分析&#xff0c;選擇合適的DDR4與DDR5內存大小以避免丟包和延遲高&#xff0c;需要考慮以下幾個方面&#xff1a; 性能與延遲&#xff1a;DDR5內存相比DDR4在傳輸速率、帶寬、工作電壓等方面都有顯著提升&#xff0c;但同時也伴隨著更高的延遲。D…

PostgreSQL開發與實戰(4)查詢性能Top SQL

作者&#xff1a;太陽 一、查詢當前正在運行的Top SQL 查詢當前正在運行的會話中耗時最長的Top SQL&#xff0c;where條件可按需修改SELECT pgsa.datname AS database_name, pgsa.usename AS user_name, pgsa.client_addr AS client_addr, pgsa.application_name AS applicat…

你知道什么是回調函數嗎?

c語言中的小小白-CSDN博客c語言中的小小白關注算法,c,c語言,貪心算法,鏈表,mysql,動態規劃,后端,線性回歸,數據結構,排序算法領域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 給大家分享一句我很喜歡我話&#xff1a; 知不足而奮進&#xff0c;望遠山而前行&am…

Unity3D外包 北京動點軟件:基于U3D開發自動駕駛技術分析

在Unity3D中開發自動駕駛AI是一個充滿挑戰和潛力的領域。以下是一些關鍵步驟和考慮因素&#xff1a; 來百度APP暢享高清圖片 1. 創建虛擬環境&#xff1a; 使用Unity3D創建一個逼真的虛擬環境&#xff0c;模擬現實世界的道路、交通標志、車輛和障礙物等。 確保場景具有真實的…