資料結構之樹

2021-08-27 08:13:50 字數 3560 閱讀 2313

樹是由n個節點組成的有限集合t,其中n>=0。特別的,若n=0,稱為空樹,如果n>0則t應滿足的條件是:

1. 有乙個特定的稱為根(root)的節點,它只有直接後繼,沒有前驅。

2. 除根以外的其它節點被劃分為m個互不相交的有限集合t1,t2,...,tm,其中m>=0,每個集合又是一顆樹,並且稱為根的子樹。每棵子樹的根節點有且僅有乙個直接前驅,但可以有0個或多個直接後繼。

如上圖,子集t1=,t2=是兩個互不相交的子集,它們既為a的子樹。樹中亦包含遞迴結構,例如子樹t1中,b又是其根節點,而且除了根節點b之外的其它節點又被分為2個互不相交的子集:t11=,t12=。它們2個都是只有乙個根節點的樹,沒有子樹。

節點的度:乙個節點含有的子樹的個數稱為該節點的度;

葉節點或終端節點:度為0的節點稱為葉節點;

非終端節點或分支節點:度不為0的節點;

葉子節點:一棵樹當中沒有子結點(即度為0)的結點稱為葉子結點;

雙親節點或父節點:若乙個節點含有子節點,則這個節點稱為其子節點的父節點;

孩子節點或子節點:乙個節點含有的子樹的根節點稱為該節點的子節點;

兄弟節點:具有相同父節點的節點互稱為兄弟節點;

樹的度:一棵樹中,最大的節點的度稱為樹的度;

節點的層次:從根開始定義起,根為第1層,根的子節點為第2層,以此類推;

樹的高度或深度:樹中節點的最大層次;

堂兄弟節點:雙親在同一層的節點互為堂兄弟;

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

子孫:以某節點為根的子樹中任一節點都稱為該節點的子孫。

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

資料結構中有很多樹的結構,其中包括二叉樹、二叉搜尋樹、2-3樹、紅黑樹等等。本文中對資料結構中常見的幾種樹的概念和用途進行了彙總,不求嚴格精準,但求簡單易懂。

二叉樹二叉樹是資料結構中一種重要的資料結構,也是樹表家族最為基礎的結構。

二叉樹的定義:二叉樹的每個結點至多只有二棵子樹(不存在度大於2的節點),二叉樹的子樹有左右之分,次序不能顛倒。

滿二叉樹

一顆樹深度為h,最大層數為k,深度與最大層數相同,k=h;

葉子數為2h;

第k層的結點數是:2^k-1;;

總結點數是:2^k-1,且總節點數一定是奇數。

完全二叉樹

如果乙個二叉樹與滿二叉樹前m個節點的結構相同,這樣的二叉樹被稱為完全二叉樹
二叉排序樹

任何節點的鍵值一定大於其左子樹中的每乙個節點的鍵值,並小於其右子樹中的每乙個節點的鍵值。
二叉樹排序前序、中序、後序

二叉樹排序(根節點和孩子結點,子樹是指最子的葉子結點)

前序:遍歷順序為,根節點、前序遍歷左子樹、前序遍歷右子樹;

中序:遍歷順序為,中序遍歷左子樹、根節點、中序遍歷右子樹;

後序:遍歷順序為,後序遍歷左子樹左子樹、後序遍歷左子樹右子樹、根節點

如上圖的根為a ,左子樹為(bde), 右子樹為(cf),

前序(根左右),a 再對左子樹進行前序就是(b,d,e), 再對右邊子樹就是cf

中序(左根右),左子樹為中序就是(dbe),a ,右子樹中序就是(fc)

後序(左右根),左子樹後續就是(deb),右邊子樹就是(fc) a

如上圖的根為1 ,左子樹為(24678), 右子樹為(35),

前序(根左右),1 再對左子樹進行前序就是(2,4,678,), 再對右邊子樹就是(35)

中序(左根右),左子樹為中序就是(4,768,2),1 ,右子樹中序就是(35)

後序(左右根),左子樹後續就是(786,4,2),右邊子樹就是(53) 1

b-樹

我們知道二叉查詢樹查詢的時間複雜度是o(logn),查詢速度最快和比較次數最少,既然效能已經如此優秀,

但為什麼實現索引是使用b-tree而不是二叉查詢樹,關鍵因素是磁碟io的次數, 減少磁碟io的次數就必須要壓縮樹的高度,

讓瘦高的樹盡量變成矮胖的樹,所以b-tree就在這樣偉大的時代背景下誕生了。

m階b-tree滿足以下條件:

1、每個節點最多擁有m個子樹

2、根節點至少有2個子樹

3、分支節點至少擁有m/2顆子樹(除根節點和葉子節點外都是分支節點)

4、所有葉子節點都在同一層、每個節點最多可以有m-1個key,並且以公升序排列

b+樹

b+tree是b樹的變種,有著比b樹更高的查詢效能,來看下m階b+tree特徵:

1、有m個子樹的節點包含有m個元素(b-tree中是m-1)

2、根節點和分支節點中不儲存資料,只用於索引,所有資料都儲存在葉子節點中。

3、所有分支節點和根節點都同時存在於子節點中,在子節點元素中是最大或者最小的元素。

4、葉子節點會包含所有的關鍵字,以及指向資料記錄的指標,並且葉子節點本身是根據關鍵字的大小從小到大順序鏈結。

b+tree與b-tree區別

非葉子結點的子樹指標與關鍵字個數相同;

非葉子結點的子樹指標p[i],指向關鍵字值屬於[k[i], k[i+1])的子樹(b-樹是開區間);

為所有葉子結點增加乙個鏈指標;

內節點不儲存data,只儲存key;葉子節點不儲存指標

所有關鍵字都在葉子結點出現;

為什麼資料索引用b+tree

1、更加高效的單元素查詢,與二叉樹相比可以大幅度減少io次數,與b樹相比,因為b+樹的資料都是存在葉子節點的,

所以同樣大小的磁碟頁可以容納更多的節點元素

2、葉子節點形成有順鍊錶,範圍查詢效能更優

比如查詢3到8的資料,如果是二叉樹或者b樹,io次數會遠大於b+樹

資料結構之 樹

1.雙親表示法 下標 資料 parentid 2.孩子表示法 data child1 child2 child3 3.雙親孩子表示法 下標 parentid firstchildid secondchildid 節點 下標 next 頁的話next應該是null 4.孩子兄弟表示法 data 第一次...

資料結構之樹

一 樹的基本概念 樹 tree 是元素的集合,樹有多個節點可以儲存元素 二 二叉樹 每個節點最多有兩個子節點的樹稱為二叉樹 常用來做二分查詢 binary search 等 三 b樹 即二叉搜尋樹 binary search tree 是一種特殊形態的二叉樹 1 所有節點最多擁有2個子節點 2 所有...

資料結構之樹

樹是節點的有限集合.度 a的度是3 b的度是2 d的度是2 c的度為0 當前節點的直接分支 葉子 終端節點就是葉子 e f g h c 根 非終端節點就是根 a b d 有序樹 如果e f不可以隨意換順序 就是有序樹 無序樹 如果 e f可以隨意換順序而且不影響邏輯 祖先 對e來說 b,a都是祖先 ...