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
相关推荐
北域码匠4 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
问天_观心4 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
洋洋不叫杨杨4 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
阿童木写作4 小时前
跨境图片翻译工具推荐:批量处理视频字幕与智能抠图
python·音视频
指掀涛澜天下惊4 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
乌萨奇也要立志学C++4 小时前
【洛谷】kmp算法
开发语言·算法
梦想的颜色4 小时前
OCR 识别原理与 Python 识图全实战:从文字提取到图像内容理解
python·计算机视觉·ocr·图像识别·python 识图
禹凕4 小时前
Dijkstra算法详解与应用
python·算法
别走!万哥爱你5 小时前
Python 中可以用于在已排序的列表中查找特定元素的位置的是什么?
python
YaraMemo5 小时前
元启发式算法框架
人工智能·算法·5g·信息与通信·启发式算法·信号处理