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

相关推荐
weixin_4668几秒前
编程之python基础
开发语言·python
打酱油的;7 分钟前
【无标题】
爬虫·python·php
前端小刘哥12 分钟前
超越“接收端”:解析视频推拉流EasyDSS在RTMP推流生态中的核心价值与中流砥柱作用
算法
前端小刘哥17 分钟前
新版视频直播点播平台EasyDSS用视频破局,获客转化双提升
算法
幸福清风36 分钟前
【Python】基于Tkinter库实现文件夹拖拽与选择功能
windows·python·microsoft·tkinter
海琴烟Sunshine39 分钟前
leetcode 168. Excel 表列名称 python
python·算法·leetcode
java1234_小锋1 小时前
TensorFlow2 Python深度学习 - 卷积神经网络示例2-使用Fashion MNIST识别时装示例
python·深度学习·tensorflow·tensorflow2
京东零售技术1 小时前
探索无限可能:生成式推荐的演进、前沿与挑战
算法
lingchen19061 小时前
多项式的积分
算法
1白天的黑夜12 小时前
递归-21.合并两个有序链表-力扣(LeetCode)
c++·leetcode·链表·递归