problem
Follow up 中說假設該 BST 被修改的很频繁
solution
follow up 必須先建立一個樹其值存該節點下包含(自己)節點。
option 1 - dfs in-order recursive
用inorder 拜訪每個節點,每拜訪一個節點 k--
,直到k=0
時,便返回節點的值
1 | class Solution { |
也可以inorder traverse方式拜訪節點並存在vector ,最後在
return vector[k];
即可
1 | class Solution { |
option 2 dfs in-order iterative
需要一個stack ,將當下拜訪到的節點的左子樹都每一個節點push 進去stack
如果拜訪到的是空節點,那則會從stack 頂部取得拜訪節點。
1 | class Solution { |
option 3
- 由於BST 特性,可以快速定位第k小的是在左右子樹。
- 先計算左子樹有多少節點,在判斷要往左子樹還是右子樹去尋找還是當前節點。
1 | class Solution { |
analysis
- option 1
- time complexity
O(n)
- space complexity
O(h)
- time complexity
- option 2
- time complexity
O(n)
- space complexity
O(h)
- time complexity
- option 3
- time complexity
O(n)
for best case,O(n^2)
for worst case - space complexity
O(h)
- time complexity