给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

示例 1:

输入:root = [3,1,4,null,2], k = 1
输出:1

示例 2:

输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3

提示:

  • 树中的节点数为n
  • 1 <= k <= n <= 10^4
  • 0 <= Node.val <= 10^4

进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第k小的值,你将如何优化算法?

1.中序遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        i = 0
        value = None
        def visit(root):
            nonlocal i, value
            if not root:
                return 
            else:
                visit(root.left)
                i += 1
                if i == k:
                    value = root.val
                    return 
                visit(root.right)
        visit(root)
        return value
最后修改日期: 2021年9月1日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。