二叉搜索树中第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
如果要频繁插入的时候,就每次插入时候用二分查找 维护这个树内元素的列表
原文地址:https://www.cnblogs.com/Lin-Yi/p/9704177.html
时间: 2024-11-01 14:30:44