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
相关推荐
hoiii18714 小时前
粒子滤波跟踪系统 - 蒙特卡洛方法实现
算法
2601_9561394214 小时前
政府事业机构品牌策划公司哪家专业
大数据·人工智能·python
Jmayday14 小时前
Pytorch:AI歌词生成器
人工智能·pytorch·python
枫叶林FYL14 小时前
项目八 云资源成本优化与治理平台
后端·python·自然语言处理·flask
reasonsummer14 小时前
【教学类-160-13】20260422 AI视频培训-练习013“豆包AI视频《师幼互动》+豆包图片风格:CG动画”
开发语言·python
AI技术增长14 小时前
Pytorch图像去噪实战(八):Noise2Void盲点网络图像去噪实战,只有单张带噪图也能训练
人工智能·pytorch·python
才兄说14 小时前
机器人二次开发机器狗巡检?路径覆盖率100%
python
weisian15115 小时前
Java并发编程--47-分布式ID生成器:雪花算法(Snowflake)与时钟回拨问题
java·算法·时钟回拨·雪花算法id
隔壁大炮15 小时前
Day07-RNN层(循环网络层)
人工智能·pytorch·python·rnn·深度学习·神经网络·计算机视觉