leetcode 二叉搜索樹中第K小的元素 python
阿新 • • 發佈:2018-09-26
binary rap wid div append idt 示例 src 查找
二叉搜索樹中第K小的元素
給定一個二叉搜索樹,編寫一個函數 kthSmallest
來查找其中第 k 個最小的元素。
說明:
你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜索樹元素個數。
示例 1:
輸入: root = [3,1,4,null,2], k = 1
3
/ 1 4
2
輸出: 1
示例 2:
輸入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ 3 6
/ 2 4
/
1
輸出: 3
進階:
如果二叉搜索樹經常被修改(插入/刪除操作)並且你需要頻繁地查找第 k 小的值,你將如何優化 kthSmallest
函數?
我的想法是廣度優先遍歷先構建一個列表,然後排個序
1 # Definition for a binary tree node.
2 # class TreeNode(object):
3 # def __init__(self, x):
4 # self.val = x
5 # self.left = None
6 # self.right = None
7
8 class Solution(object):
9 def kthSmallest(self, root, k):
10 """
11 :type root: TreeNode
12 :type k: int
13 :rtype: int
14 """
15 # 先廣度優先遍歷
16 width = [root]
17 val = [root.val]
18 i = 0
19 while i < len(width):
20 cur = width[i]
21 if cur.left is not None:
22 width.append(cur.left)
23 val.append(cur.left.val)
24 if cur.right is not None:
25 width.append(cur.right)
26 val.append(cur.right.val)
27 i += 1
28 val.sort()
29
30 return val[k-1]
31
32
33
如果要頻繁插入的時候,就每次插入時候用二分查找 維護這個樹內元素的列表
leetcode 二叉搜索樹中第K小的元素 python