LeetCode(python)230.二叉搜索树中第k小的元素

题目

给定一个二叉搜索树的根节点 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 <= 104
  • 0 <= Node.val <= 104

思路

核心思路:二叉搜索树的中序遍历是升序序列

so,中序遍历一遍二叉搜索树,在遍历的过程中计数,就可以找到第k小的元素了~

中序遍历的递归模板就是:

inorder(node.left)

遍历中需要做的事~

inorder(node.right)

代码

有一个需要注意的点:self.result is not None != not self.result

前一个是严格判断是否为空,后一个是判断布尔值是否为0

python 复制代码
# 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: Optional[TreeNode], k: int) -> int:
        self.count = 0
        self.result = None
        def inorder(node: Optional[TreeNode]) -> None:
            if not node or self.result is not None: return  # 提前结束递归
            inorder(node.left)
            #中序遍历中需要做的操作:
            self.count += 1
            if self.count == k:
                self.result = node.val
                return
            inorder(node.right)
        inorder(root)
        return self.result
相关推荐
GreenTea7 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
2603_965148118 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
fqq38 小时前
力扣刷题前置Java语法
算法·leetcode·职场和发展
jufeng13079 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 8 篇】
python·ai agent·配置系统
circuitsosk9 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
2601_9563198810 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
过期的秋刀鱼!10 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
半夏微凉半夏殇11 小时前
x11与weston对比,优先选哪个
leetcode·均值算法·eclipse
2501_9065651211 小时前
数学之美探究
算法
萤火工厂目视化设计11 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造