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
相关推荐
2501_947575802 小时前
计算机毕业设计之jsp开山车行二手车交易系统
java·开发语言·hadoop·python·信息可视化·django·课程设计
古城小栈2 小时前
为啥说:训练用BF16,推理用FP16
人工智能·算法·机器学习
KaMeidebaby2 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
Byron__3 小时前
AI学习_06_短期记忆与长期记忆
人工智能·python·学习
Turbo正则3 小时前
群论在AI中的应用概述
人工智能·算法·抽象代数
ysa0510303 小时前
【并查集】判环
c++·笔记·算法
Jerry4 小时前
KeetCode 44. 开发商购买土地
算法
取经蜗牛4 小时前
Python 第一阶段完全指南:从零到第一个实用工具
开发语言·python
创世宇图4 小时前
【Python工程化实战】OpenTelemetry 在 Python 中的全链路追踪落地:从埋点到可视化的完整实战指南
python·分布式链路追踪·性能监控·opentelemetry·微服务可观测性
Jerry4 小时前
KeetCode 58. 区间和
算法