【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博客

相关推荐
中微极客6 分钟前
TensorFlow模型量化实战:从精度到延迟的优化指南
人工智能·python·tensorflow
ForDreamMusk14 分钟前
批量归一化
人工智能·算法·机器学习
Ivanqhz1 小时前
刚体的自由度
人工智能·算法
KaMeidebaby1 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
仙人球部落2 小时前
-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)
开发语言·javascript·python
蜡笔削薪2 小时前
财联支付异地拓展商户的区域限制是否符合监管规定?
大数据·python
印度神油92 小时前
Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
windows·python·ci/cd
Yang_jie_032 小时前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
2301_800895102 小时前
信息安全数学基础复习
算法
爱折腾的小黑牛2 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法