[資料結構] Binary Search Tree(BST)
TL;DR
- 每個 Node 會包含
value
, left
和 right
- Binary Search Tree 會實作
lookup
, insert
, 和 remove
的方法
Binary Search Tree 的特性
- Perfect Binary Tree 有幾個重要的特性:
- 每下一層的 Node 數量都是上一層 Node 數的兩倍
- 最下層 Node 的數量會等於其上層所有 Node 數量加總後 + 1。例如,三層的 Perfect Tree,則三層 Node 的數量,會等同於前兩層的數量加總後再加 1,也就是
4 = 3 + 1
。
- Node 的總數量會同於 2 的(Node 層數)次方 -1,也就是
2^h - 1
。
- Binary Search Tree 有一個很重要的概念是,它是有「階層(關係)」的概念在內,並不是把所有數字放在同一層排序。
- 在建立 BST instance 時會把 root 的 value 一併帶入
- 新增值到 BST 時,會判斷這個值比 root 大或小,再以同樣的邏輯分派到 BST 的左下側或右下側
- 檢驗 BST 中包含是否包含某一值時,也是使用同樣的邏輯,先判斷這個值比 root 大還是小,接著依同樣的邏輯往左下側或右下側尋找
- 找出最小值的方式是從 root 開始一路往左下找;找出最大值的方式則是從 root 開始一路往右下找
- 要疊代整個 BST 元素的方式可以分成 Depth First Traversal 和 Breadth First Traversal。
- 其中 Depth First Traversal 又可以分成:
- 由小到大依序迭代(in-order)
- 由上往下,由左至右(pre-order)
- 由下往上,由左至右(post-order)
- Breadth First Traversal 則是以水平的方式由上往下依序疊代所有內容
Big O Notation