第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]
好吧,寫的過(guò)程中就覺(jué)得很蠢
它已經(jīng)排好序了押框,所以岔绸,在操作得當(dāng)?shù)那疤嵯拢粫?huì)出現(xiàn)先裝大的后裝小的。只需要從小往大裝就好亭螟,也就不需要堆挡鞍。
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 沒(méi)裝到k個(gè)
self.hq.append(r_val)
visit(root.right)
else:
return
visit(root)
return self.hq[-1]