1. 程式人生 > >leetcode 二叉搜索樹中第K小的元素 python

leetcode 二叉搜索樹中第K小的元素 python

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