leet230. 二叉搜索树中第K小的元素

题目:

给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。

注意:
你可以假设k总是有效的,1≤ k ≤二叉搜索树元素个数。

进阶:
如果经常修改二叉搜索树(插入/删除操作)并且你需要频繁地找到第k小值呢? 你将如何优化kthSmallest函数?

分析:

  1. 根据BST的特点,任一左子树节点值不大于根节点值,根节点值不大于右子树节点值
  2. 采用中序遍历,节点值依次递增,当遍历到第k个节点时刚好为第k小的元素

代码:

class Solution(object):
    def kthSmallest(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: int
        """
        self.count = 0
        self.ret = 0
        self.flag = True
        def dfs(node,k = k):
            if self.flag and node:
                dfs(node.left)
                self.count += 1
                if self.count == k:
                    self.ret = node.val
                    self.flag = False
                    return self.ret
                dfs(node.right)
        dfs(root,k)
        return self.ret

思考:



猜你喜欢

转载自blog.csdn.net/yzp1011/article/details/79821702