什么是二叉樹?
在計算機科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”和“右子樹”,左子樹和右子樹同時也是二叉樹。二叉樹的子樹有左右之分,並且次序不能任意顛倒。二叉樹是遞歸定義的,所以一般二叉樹的相關題目也都可以使用遞歸的思想來解決,當然也有一些可以使用非遞歸的思想解決,我下面列出的一些算法有些采用了遞歸,有些是非遞歸的。
什么是二叉排序樹?
二叉排序樹又叫二叉查找樹或者二叉搜索樹,它首先是一個二叉樹,而且必須滿足下面的條件:
1)若左子樹不空,則左子樹上所有結點的值均小於它的根節點的值;
2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值
3)左、右子樹也分別為二叉排序樹
4)沒有鍵值相等的節點(?可能是因為不好處理鍵值相等的節點到底是左節點還是右節點吧)
先序遍歷 (根 左 右)
先訪問根,再遍歷左子樹,再遍歷右子樹。典型的遞歸思想。
中序遍歷(左 根 右)
先遍歷左子樹,再訪問根,再遍歷右子樹。
對於二叉排序樹來說,中序遍歷得到的序列是一個從小到大排序好的序列。
后序遍歷 (左 右 根)
先遍歷左子樹,再遍歷右子樹,再訪問根
B樹、B+樹
參考: https://www.cnblogs.com/vincently/p/4526560.html
小結:
B-Tree它能夠存儲數據、對其進行排序並允許以O(log n)的時間復雜度運行進行查找、順序讀取、插入和刪除的數據結構
Mysql 數據庫的存儲結構就是B-Tree 和B+ Tree
B樹是2-3樹的一種擴展,他允許一個節點有多於2個的元素。
B樹的插入及平衡化操作和2-3樹很相似
2-3樹介紹:
由於B+樹的數據都存儲在葉子結點中,分支結點均為索引,方便掃庫,只需要掃一遍葉子結點即可,
但是B樹因為其分支結點同樣存儲着數據,我們要找到具體的數據,需要進行一次中序遍歷按序來掃,
所以B+樹更加適合在區間查詢的情況,所以通常B+樹用於數據庫索引,而B樹則常用於文件索引。
紅黑樹:
參考: https://www.cnblogs.com/CarpenterLee/p/5503882.html
小結:
紅黑樹是一種近似平衡的二叉查找樹,它能夠確保任何一個節點的左右子樹的高度差不會超過二者中較低那個的一陪。具體來說,紅黑樹是滿足如下條件的二叉查找樹(binary search tree):
- 每個節點要么是紅色,要么是黑色。
- 根節點必須是黑色
- 紅色節點不能連續(也即是,紅色節點的孩子和父親都不能是紅色)。
- 對於每個節點,從該點至
null
(樹尾端)的任何路徑,都含有相同個數的黑色節點。