數據結構- 10種常見樹:二叉樹、平衡二叉樹、完全二叉樹

一、樹

樹型結構是一類重要的非線性數據結構。其中以樹和二叉樹最為常用,直觀看來,樹是以分支關系定義的層次結構。把它叫做“樹”是因為它常看起來像一棵倒掛的樹,也就是說它常是根朝上,而葉朝下的。

1.樹的定義:

樹是 N(N≥ 0) 個結點的有限集。當 N=0 時,稱為空樹。在任意一棵樹非空樹中應滿足:

(1) 有且僅有一個特定的稱為根 (root) 的結點

(2) 當 N > 1?時,其余結點可分為 M(M>0)個互不相交的有限集T1,T2,T3...Tm,其中每一個集合本身又是一顆樹,并且稱為根的子樹(SubTree)

2.樹的基本概念:

1. 結點:包含一個數據元素及若干指向其子樹的分支;

2.結點的度:一個結點擁有的子樹的數目;

3.葉子或終端結點:度為0的結點;

4.非終端結點或分支結點:度不為0的結點;

5.樹的度:樹內各結點的度的最大值;

6.孩子結點或子結點:結點的子樹的根稱為該結點的孩子結點或子結點;

7.雙親結點或父結點:若一個結點含有子結點,則這個結點稱為其子結點的雙親結點或父結點;

8.兄弟結點:同一個雙親的孩子之間互稱兄弟;

9.祖先結點:從根到該結點所經分支上的所有結點;

10.子孫結點:以某結點為根的子樹中任一結點都稱為該結點的子孫;

11.堂兄弟結點:其雙親在同一層的結點互為堂兄弟;

12.結點的層次:從根開始定義起,根為第一層,根的孩子為第二層。若某結點在第層.則其子樹的根就在第層;

13.樹的深度或高度:樹中結點的最大層次;

14.森林:由M(M>0)棵互不相交的樹的集合稱為森林;

15.有序樹和無序樹:樹中結點的各子樹從左到右是有次序的,不能互換,稱該樹為有序樹,否則稱為無序樹;

16.路徑和路徑長度:路徑是由樹中的兩個結點之間的結點序列構成的。而路徑長度是路徑上所經過的邊的個數。

二、二叉樹

1.二叉樹定義:

二叉樹?(Binary Tree)的特點是每個結點至多只有兩棵子樹 (即二叉樹中不存在度大于2的結點),分別稱為左子樹和右子樹。二叉樹是一種遞歸的數據結構,可以是空樹(即沒有任何結點),或者是由根結點及其左右子樹組成。并且,二叉樹的子樹有左右之分,其次序不能任意顛倒。

2.二叉樹的特點:

(1)每個結點最多有兩個子結點,分別稱為左子結點和右子結點。

(2)左子樹和右子樹都是二叉樹,它們本身也可以是空樹。

(3)二叉樹的結點結構包含一個數據元素和指向左右子樹的指針。

3.?二叉樹有多種類型:

? ? ?包括:二叉排序樹、完全二叉樹、滿二叉樹、平衡二叉樹等。

?二叉樹示例

三、二叉排序樹(二叉搜索樹)

1、定義:

二叉排序樹(Binary Sort Tree),也稱為二叉查找樹或二叉搜索樹。其或者是一棵空樹;或者是具有下列性質的二叉樹?[5]:

(1)若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;

(2)若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;

(3)它的左、右子樹也分別為二叉排序樹。

其中葉結點除外的所有結點均含有兩個子樹的樹被稱為滿二叉樹。除最后一層外,所有層都是滿結點,且最后一層缺右邊連續結點的二叉樹稱為完全二叉樹。

二叉搜索樹?

2、特點:

二叉排序樹的特性使得在其中進行搜索、插入和刪除操作時具有較高的效率。

四、滿二叉樹

1、定義:

對于一個二叉樹,如果每一個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,如果一個二叉樹的層數為 h? ,且結點總數是??2^{h}-1 ,則它就就是滿二叉樹?。

?葉結點除外的所有結點均含有兩個子樹的樹被稱為滿二叉樹?。

2、滿二叉樹特點:

可以對滿二叉樹按層序編號:約定編號從根結點(根結點編號為1)起,自上而下,自左向右。這樣,每個結點對應一個編號,對于編號為 i? 的結點,若有雙親,則其雙親為 i/2 ,若有左孩子,則左孩子為 2i?,若有右孩子,則右孩子為 2i+1?。滿二叉樹示例,如下圖所示:

五、完全二叉樹

1、定義:

對于二叉排序樹, 除最后一層外,所有層都是滿結點,且最后一層缺右邊連續結點的二叉樹稱為完全二叉樹。

2、完全二叉樹特點

  • 如果樹的深度為k ;
  • 則至少有2^{k-1}?個節點;
  • 最多具有?2^{k} -1?個節點。

六、平衡二叉樹

1、定義:

平衡二叉樹(Balanced Binary Tree 或 Height-Balanced Tree)又稱AVL樹。它或者是一棵空樹,或者是具有下列性質的二叉樹:它的任意結點的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1。

2、特點:

若將二叉樹上結點的平衡因子BF(Balance Factor)定義為該結點的左子樹的深度減去它的右子樹的深度,則平衡二叉樹上所有結點的平衡因子只可能是-1、0和1。只要二叉樹上有一個結點的平衡因子的絕對值大于1,則該二叉樹就是不平衡的[1]。平衡二叉樹示例,如下圖所示:

?七、紅黑樹

1、定義

為了保持平衡二叉樹(AVL樹)的平衡性,插入和刪除操作后,非常頻繁地調整全樹整體拓撲結構,代價較大。為此在AVL樹的平衡標準上進一步放寬條件,引入了紅黑樹(Red-Black Tree)的結構 。

一棵紅黑樹是滿足如下紅黑性質的二叉排序樹 :

(1)每個結點是紅色,或是黑色的;

(2)根結點是黑色

(3)葉子結點(虛構的外部結點、NULL結點)都是黑色的

(4)不存在兩個相鄰的紅結點(即紅結點的父結點和孩子結點均是黑色的);

(5)對每個結點、從該結點到任一葉子結點的簡單路徑上,所含黑結點的數量相同。

如果插入和刪除操作較少,查找操作較多,采用AVL樹比較合適,否則使用紅黑樹更為合適。但由于維護這種高度平衡所付出的代價比獲得的收益大得多,因此紅黑樹的實際應用更廣泛,C++中的map和set(Java中TreeMap和TreeSet就是用紅黑樹實現的?[5])。紅黑樹示例,如下圖所示:

八、哈夫曼樹

1、定義:

哈夫曼樹(Huffman Tree)是一種特殊的二叉樹,用于數據壓縮中的哈夫曼編碼(Huffman Coding)算法。哈夫曼樹的構建基于字符出現的頻率,通常用于壓縮數據,使得出現頻率高的字符使用較短的編碼而出現頻率低的字符使用較長的編碼,從而達到壓縮數據的目的。

2、構建哈夫曼樹

構建哈夫曼樹的步驟包括:

(1)統計字符頻率:首先,統計待壓縮的數據中每個字符出現的頻率。

(2)構建哈夫曼樹:根據字符頻率構建一棵哈夫曼樹。構建的過程是通過將出現頻率最低的兩個結點合并為一個新結點,新結點的頻率為原結點頻率之和,并將新結點插入到樹中,重復這一過程直到只剩下一個根結點為止。

(3)生成編碼:對于哈夫曼樹中的每個字符,從根結點開始沿著路徑向下,每次移動到左子結點則表示該字符編碼中添加一個 0,每次移動到右子結點則表示添加一個 1,直到到達葉子結點。這樣,每個字符都可以對應一個唯一的編碼。

(4)數據壓縮:將原始數據中的每個字符替換為對應的哈夫曼編碼,從而實現數據的壓縮。

哈夫曼樹示例,如下圖所示:

九、B樹

B樹是為磁盤或其他直接存取的輔助存儲設備而設計的一種平衡搜素樹 。B樹類似于紅黑樹,但它們在降低磁盤 I/0操作數方面要更好一些。許多數據庫系統使用B樹或者B樹的變種來存儲信息?。

B樹與紅黑樹的不同之處在于B樹的結點可以有很多孩子,從數個到數千個能夠保持較低的高度并且保持數據的有序性,從而提高了數據的檢索效率和存儲效率 。

B樹示例,如下圖所示:

十、B+樹

?1、定義

B+樹是一種常見的B樹變種,類似于B樹,但在某些方面有所不同。例如:B+樹的非葉子結點只包含鍵值,不存儲實際數據。相比之下,B樹的非葉子結點不僅包含鍵值,還包含對應的數據;由于B+樹的葉子結點是通過指針相連的有序鏈表,因此范圍查詢的性能更好。相比之下,B樹需要進行中序遍歷來查找范圍內的鍵值。

B+樹通常用于數據庫系統和文件系統中,特別是用于實現索引結構 。

B+樹示例,如下圖所示:

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

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

相關文章

Java常用加密方式

一,加密算法分類 對稱加密:指加密和解密的密鑰相同,優點就是加解密的效率高且易于實現。 非對稱加密:指加密和解密的密鑰不相同,也稱為公私要加密。 不可逆加密:特征就是加密過程不需要密鑰,…

SQLite軟件架構與實現源代碼淺析

概述 SQLite 是一個用 C 語言編寫的庫,它成功打造出了一款小型、快速、獨立、具備高可靠性且功能完備的 SQL 數據庫引擎。本文檔將為您簡要介紹其架構、關鍵組件及其協同運作模式。 SQLite 顯著特點之一是無服務器架構。不同于常規數據庫,它并非以單獨進…

讓 Deepseek GPS測速

下面是一個簡單的微信小程序GPS測速功能的實現代碼&#xff0c;包括前端頁面和后端邏輯。 1. 頁面結構 (index.wxml) <view class"container"><view class"speed-display"><text class"speed-value">{{speed}}</text>…

什么是軟件的生命周期,以及常見的開發測試模型

目錄 一、軟件的生命周期 1、什么是生命周期&#xff1f; 2、每個階段都要做些什么&#xff1f; 二、常見的開發模型 1、瀑布模型 2、螺旋模型 3、增量模型、迭代模型 4、敏捷模型 scrum模型 三個角色 五個會議 一、軟件的生命周期 1、什么是生命周期&#xff…

JWT安全:弱簽名測試.【實現越權繞過.】

JWT安全&#xff1a;假密鑰【簽名隨便寫實現越權繞過.】 JSON Web 令牌 (JWT)是一種在系統之間發送加密簽名 JSON 數據的標準化格式。理論上&#xff0c;它們可以包含任何類型的數據&#xff0c;但最常用于在身份驗證、會話處理和訪問控制機制中發送有關用戶的信息(“聲明”)。…

數據分析與應用-----使用scikit-learn構建模型

目錄 一、使用sklearn轉換器處理數據 &#xff08;一&#xff09;、加載datasets模塊中的數據集 &#xff08;二&#xff09;、將數據集劃分為訓練集和測試集 ?編輯 train_test_spli &#xff08;三&#xff09;、使用sklearn轉換器進行數據預處理與降維 PCA 二、 構…

【Tomcat】Tomcat端口僅允許本地訪問設置方法

要設置Tomcat端口僅允許本地訪問&#xff0c;可以通過以下兩種主要方式實現&#xff1a; 方法一&#xff1a;修改Tomcat配置文件&#xff08;推薦&#xff09; 修改 server.xml 文件 打開Tomcat的配置文件 conf/server.xml&#xff0c;找到 <Connector> 標簽&#xff08;…

arcgis字段計算器中計算矢量面的每個點坐標

python腳本 函數 def ExportCoordinates(feat):coors = []partnum = 0partcount = feat.partCountwhile partnum < partcount:part = feat.getPart(partnum)pnt = part.next()while pnt:coors.append("({}, {})".format(pnt.X,pnt.Y))pnt = part.next()if not p…

企業級AI開啟落地戰,得場景者得天下

文&#xff5c;白 鴿 編&#xff5c;王一粟 這兩周&#xff0c;企業級智能體開發平臺頗有你方唱罷我方登臺的架勢。 微軟、騰訊、網易等國內外巨頭&#xff0c;近期都相繼宣布推出了新一代智能體開發平臺。相比于兩年前&#xff0c;智能體開發的產品邏輯已經有了翻天覆地的變…

探索C++標準模板庫(STL):String接口實踐+底層的模擬實現(中篇)

前引&#xff1a;上一篇文章小編已經整理出了String的常用接口&#xff0c;梳理了各個接口的功能、參數&#xff0c;如何使用等各種實例。本篇文章將帶大家看看String這些接口的實踐使用&#xff0c;探索這些接口的實用性&#xff0c;是如何增加代碼效率的。在本篇文章的末尾&a…

【模型顯著性分析】配對樣本 t 檢驗

寫在前面&#xff1a;本博客僅作記錄學習之用&#xff0c;部分圖片來自網絡&#xff0c;如需引用請注明出處&#xff0c;同時如有侵犯您的權益&#xff0c;請聯系刪除&#xff01; 文章目錄 前言 t t t 檢驗配對樣本 t t t 檢驗&#xff08;適用于相關組&#xff09;代碼論文描…

商旅平臺排名:十大商旅服務平臺解析

商旅平臺排名&#xff1a;十大商旅服務平臺解析 在企業降本增效的關鍵轉型期&#xff0c;商旅管理正成為優化運營成本與提升管理效能的核心場景。如何在保障出行體驗的同時實現差旅成本精細化管控、管理流程智能化&#xff0c;成為越來越多企業的戰略焦點。隨著AI技術在數據洞…

題海拾貝:P1208 [USACO1.3] 混合牛奶 Mixing Milk

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》、《C修煉之路》 歡迎點贊&#xff0c;關注&am…

每天掌握一個Linux命令 - ab(Apache Benchmark)

Linux 命令工具 ab 使用指南 一、工具概述 ab&#xff08;Apache Benchmark&#xff09; 是 Apache 官方提供的開源壓力測試工具&#xff0c;用于衡量 Web 服務器的性能。它通過模擬多并發請求&#xff0c;測試服務器在高負載下的響應速度、吞吐量和穩定性&#xff0c;常用于…

AI的“空間盲癥“

<------最重要的是訂閱“魯班模錘”------> 當我們看到一張照片時&#xff0c;大腦會自動分析其中的空間關系——哪個物體在前&#xff0c;哪個在后&#xff0c;左邊是什么&#xff0c;右邊是什么。但對于當今最先進的AI系統來說&#xff0c;這種看似簡單的空間理解卻是…

數據擬合實驗

實驗類型&#xff1a;●驗證性實驗 ○綜合性實驗 ○設計性實驗 實驗目的: 進一步熟練掌握最小二乘多項式擬合算法&#xff0c;提高編程能力和解決擬合問題的實踐技能。 實驗內容&#xff1a; 1 對下列數據&#xff0c;求解最小二乘拋物線f(x)Ax2BxC x -3 -1 1 3 y 15 5 …

系統思考:心智模式與業務創新

在最近的項目交付討論中&#xff0c;我頻繁聽到一個詞&#xff1a;“缺合適的人”。這讓我陷入了深思&#xff1a;我們是否還在傳統的生產力概念&#xff1f;納瓦爾提出的三種杠桿&#xff1a;勞動力、資本、零邊際成本產品。在當今這個信息化、全球化的商業世界中&#xff0c;…

python分步合并處理excel數據

文章目錄 概要整體架構流程技術名詞解釋技術細節小結概要 客戶需求 1. 背景與目標 用戶需要將三個包含農業實驗數據的Excel表格(AK、AN、AP)合并為一個結構化數據集,用于后續分析。每個表格包含相同類型的字段(如對照組與PSB處理組的樣本數、均值、標準差),但需通過字…

Python爬蟲實戰:研究PyQuery庫相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網的快速發展,網絡上的數據量呈爆炸式增長。如何高效地從海量的網頁數據中提取有價值的信息,成為當前信息技術領域的一個重要研究方向。網絡爬蟲作為一種自動獲取網頁內容的程序,能夠按照一定的規則,自動地抓取萬維網信息,在搜索引擎…

深度學習---注意力機制(Attention Mechanism)

一、核心概念與發展背景 注意力機制是深度學習中模擬人類注意力選擇能力的關鍵技術&#xff0c;旨在從海量信息中篩選關鍵特征&#xff0c;解決長序列信息處理中的瓶頸問題&#xff08;如RNN的梯度消失&#xff09;。其核心思想是&#xff1a;對輸入序列的不同部分分配不同權重…