二元搜尋樹(英語:Binary Search Tree),也稱為有序二元樹(ordered binary tree)或排序二元樹(sorted binary tree)。 從 wiki 上得到的時間與空間複雜度 :

演算法平均最差
空間O(n)O(n)
搜尋O(log n)O(n)
插入O(log n)O(n)
刪除O(log n)O(n)

定義

  • 以左邊節點 ( left node ) 作為根的子樹 ( sub-tree ) 的所有值都小於根節點 ( root )
  • 以右邊節點 ( right node ) 作為根的子樹 ( sub-tree ) 的所有值都大於根節點 ( root )
  • 任意節點 ( node ) 的左、右子樹也分別符合 BST 的定義

承上定義也可以知道,不存在任何鍵值 ( key/value ) 相等的節點。因為如果有相等值的節點就會違反第一點或第二點。


特性

Binary Search Tree 是基於 binary search 而建立的資料結構,所以搜尋的時間複雜度能達成 O(log n)。但不是說使用了 BST 做搜尋就一定可以穩定 O(log n),搜尋的最差情況是在 O(n) ,關鍵就平衡,也就是所謂樹高。因為二元搜尋樹的查詢複雜度取決於深度。為了實現更高效的查詢,產生了平衡樹。


Depth First Traversal

Pre-Order:適合使用在想要 Copy Tree 時使用

由上往下,由左至右,依序輸出所有內容。

In-Order:由小到大依序迭代

從最底部開始,先把左邊的輸出,再輸出右邊的,如此所有的值就會由小到大依序排列。

Post-Order: 適合使用在刪除節點時

由下往上,由左至右。

Exercise

LeetCode230. Kth Smallest Element in a BST


Reference

wiki

資料結構大便當 — binary search tree

PJCHENder Binary Search Tree