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

相关推荐
luoluoal4 分钟前
基于深度学习的web端多格式纠错系统(源码+文档)
python·mysql·django·毕业设计·源码
数智工坊9 分钟前
【数据结构-队列】3.2 队列的顺序-链式实现-双端队列
数据结构
深蓝海拓11 分钟前
PySide6从0开始学习的笔记(二十七) 日志管理
笔记·python·学习·pyqt
天天进步201520 分钟前
Python全栈项目:实时数据处理平台
开发语言·python
Tipriest_20 分钟前
Python中is关键字详细说明,比较的是地址还是值
开发语言·python
sheji341621 分钟前
【开题答辩全过程】以 基于Python的餐饮统计系统的设计和实 现为例,包含答辩的问题和答案
开发语言·python
elseif12322 分钟前
【C++】并查集&家谱树
开发语言·数据结构·c++·算法·图论
偷吃的耗子34 分钟前
【CNN算法理解】:卷积神经网络 (CNN) 数值计算与传播机制
人工智能·算法·cnn
遨游xyz34 分钟前
排序-快速排序
开发语言·python·排序算法
徐小夕@趣谈前端43 分钟前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6