leetcode 二叉搜索树中第K小的元素 python 之 一个错误的示范

第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]

你可能感兴趣的:(leetcode 二叉搜索树中第K小的元素 python 之 一个错误的示范)