- 是一種 Binary Tree
- 節點 不能重複
- 左小 右大 Left Tree < Root Node < Right Tree
- 找比 Current Node 大,往右邊走,反之往右邊
- 找不到回傳Null
- 先Search,如果適合插入的位置是Null,直接插入
- 要刪除的Node,Sub Node都是Null,把 Previous Node 直接刪除 (直接砍樹)
- 要刪除的Node,Left Node != null, 2. 上一個Node的 某一邊 Sub Node 3. 直接是 Current Node 的 Left Node
- 要刪除的Node,Right Node != null,
- 上一個Node的 某一邊 Sub Node
- 直接是 Current Node 的 Right Node
- 要刪除的Node,ALL Sub Node != Null
- Right Tree 上移
- 先找出 Right Tree 最小值
- 與其交換
- 在 Right Tree 中刪除該Node
- Left Tree 上移
- 先找出 Left Tree 最大值
- 與其交換
- 在 Left Tree 中刪除該Node
- Right Tree 上移
某一邊 Sub Node是指 Current Node 跟 Previous Node 關係
Name | Search | Insert | Delete |
---|---|---|---|
Best Big-O | log(n) | log(n) | log(n) |
worst Big-O | n | n | n |
Array 實作 Delete 難度很高
- Root > Left Tree Max Get Max
- Root < Right Tree Min Get Min
需要 traverse each Sub Tree
-
5
-
2 6
- 1 4 x 7
- x x 3 x x x x x
- 1 2 3 4 5 6 7
Eq -> n * (getMin + delete)
- 7 6 5 4 3 2 1
Eq -> n * (getMax + delete)