二叉樹、二叉搜索樹、平衡二叉樹、B樹、B+樹的精確定義和區別探究


概述

關於樹的概念很多,B樹,B+樹,紅黑樹等等。

但是你去翻翻百度百科,或者用百度或者谷歌搜索一下中文的樹結構的介紹,全都是狗屁。沒有哪個中文網站是真正精確解釋樹的定義的,尤其是百度百科。

下面我要根據我自己的學習和理解。給出一些中文的定義。

 

什么是二叉樹(Binary Tree)

二叉樹是每個節點最多有兩個子節點的樹。

二叉樹的葉子節點有0個字節點,二叉樹的根節點或者內部節點有一個或者兩個字節點。

 

 

 

什么是二叉搜索樹(Binary Search Tree)

二叉查找樹又叫二叉搜索樹,

它或者是一棵空樹,或者是具有下列性質的二叉樹:

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

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

它的左、右子樹也分別為二叉搜索樹。

 

一個印象比較深的二叉搜索樹就是問手機號。

假設你遇到一個美女想問他手機號,但是美女一般不告訴你數字。她只回答是否題。

 

那么你可以問她不超過14個問題就可以知道她手機號了。

 

假定手機號最大值是1000 0000 0000

是否大於500 0000 0000,開始分叉。

如果大於500 0000 0000,那么是否大於750 0000 0000。。。

如果小於500 0000 0000,那么是否大於250 0000 0000。。。

 

以此類推,這就是一個典型的二叉搜索樹。看起來很神奇,其實源自於一種巧妙的數學。

 

什么是平衡二叉樹(AVL Tree)

 AVL樹全稱G.M. Adelson-Velsky和E.M. Landis,這是兩個人的人名。

AVL樹定義:

所有節點的左右子樹的高度差小於1的二叉樹。

 

如下圖

根節點左邊高度是3,因為左邊最多有3條邊;右邊高度而2,相差1.

根節點左邊的節點50的左邊是1條邊,高度為1,右邊有兩條邊,高度為2,相差1。

 

 

 

什么是B樹(B tree)

 B樹也叫或B-樹、B_樹。

B樹英文官方定義:

1、Every node has at most m children.
2、Every non-leaf node (except root) has at least [m/2] child nodes.
3、The root has at least two children if it is not a leaf node.
4、A non-leaf node with k children contains k − 1 keys.
5、All leaves appear in the same level.

 

我理解的B樹定義:

1、根結點至少有兩個子節點;

 2、每個非葉子節點並且非根節點最少有m/2個,即內部節點的字節點個數最少也有m/2個。

3、根節點最少有兩個字節點。

4、有k個關鍵字(關鍵字按遞增次序排列)的非葉結點恰好有k+1個孩子。

5、所有葉子節點在同一層,即所有葉子幾點高度一致。

 

如下圖(B樹的內部節點可以存放數據,類似ZK的中間節點一樣。B樹不是每個節點都有足夠多的子節點)

 

 

 

什么是B+樹(B+ tree)

 B+樹是從B樹衍生而來。

跟B的不同:

1、B+樹非葉子節點不存放數據,只存放keys。

2、B+樹的葉子節點之間存在指針相連,而且是單鏈表

 

如下圖(其實B+樹上二叉搜索樹的擴展,二叉搜索樹是每次一分為二,B樹是每次一分為多)

現代操作系統中,磁盤的存儲結構使用的是B+樹機制,mysql的innodb引擎的存儲方式也是B+樹機制

 

 

 數據結構參考資料

下面這個網站是一個介紹了很多數據結構的英文網站,可以參考下:

https://www.javatpoint.com/b-plus-tree

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM