第K小元素,那就大顶堆呗:
import heapq
class Solution(object):
def kthSmallest(self, root, k):
self.hq=[]
def visit(root):
if root is None:
return
print(root.val,self.hq)
r_val=root.val
if len(self.hq) < k:
heapq.heappush(self.hq,-r_val)
visit(root.left)
visit(root.right)
else:
if r_val < -self.hq[0]:
heapq.heapreplace(self.hq,-r_val)
visit(root.left)
visit(root.right)
else:
visit(root.left)
visit(root)
return -self.hq[0]
好吧,写的过程中就觉得很蠢
它已经排好序了,所以,在操作得当的前提下,不会出现先装大的后装小的。只需要从小往大装就好,也就不需要堆。
class Solution(object):
def kthSmallest(self, root, k):
self.hq=[]
def visit(root):
if root is None:
return
visit(root.left)
r_val=root.val
if len(self.hq) < k: #hq 没装到k个
self.hq.append(r_val)
visit(root.right)
else:
return
visit(root)
return self.hq[-1]