【leetcode100】二叉搜索树中第k小的元素

1、题目描述

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

示例 1:

复制代码
输入:root = [3,1,4,null,2], k = 1
输出:1

2、初始思路

2.1 思路

使用中序遍历(左根右)进行遍历,遍历结果为从小到大的排序,进而可以输出第k小的元素。

复制代码
# 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:
        result = []
        def fore(node):
            if not node:
                return
            fore(node.left)
            result.append(node.val)
            fore(node.right)
        fore(root)
        return result[k-1]

2.2 缺点

要对整个二叉树进行遍历,运行时间较长

3 优化算法

3.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: Optional[TreeNode], k: int) -> int:
        stack = []
        while root or stack:
            while root:
                stack.append(root)
                root = root.left
            root = stack.pop()
            k -= 1
            if k == 0:
                return root.val
            root = root.right

4 总结

二叉树的遍历参考【二叉树】遍历总结!-CSDN博客

相关推荐
Chester_19991 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
DeepVisionary1 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃2 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
裕晟资质规划2 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
海兰2 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
cvcode_study2 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
en.en..3 小时前
C语言 标准输入 / 输出缓冲区
算法
星核0penstarry3 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20004 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py
海兰4 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(一)
javascript·python·金融