力扣: 二叉搜索树中第K小的元素

简介: 力扣: 二叉搜索树中第K小的元素

预备知识


二叉搜索树


  • 它或者是一棵空树,或者是具有下列性质的二叉树:
  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树。


中序遍历


中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。


二叉搜索树的中序遍历


二叉搜索树中,左子树的值 < 根节点 < 右子树,中序遍历顺序是 左 -> 根 -> 右,因此二叉搜索树的中序遍历结果为一串值从小到大递增序列。


题目: 二叉搜索树中第K小的元素


题目来源: 二叉搜索树中第K小的元素


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


示例:


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

image.png

题目分析


有了预备知识的基础,我们可以很轻易地得出当前题目的思路,使用中序遍历二叉搜索树,当遍历到第 k 个节点后,退出遍历,返回结果。


代码


本文章采取非递归模式的中序遍历.


def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
  cnt = 0
  p = root
  stack = []
  # 
  while p != None or len(stack) :
      # 遍历左子树
      while p != None:
          stack.append(p)
          p = p.left
      # 如果栈中不空,说明还存在节点待遍历
      if len(stack):
          tmp = stack.pop()
          # 中序遍历的右节点
          p = tmp.right
          cnt += 1
          # 遍历到第k个节点,返回结果
          if cnt == k:
              return tmp.val
复制代码


往期精彩文章



后语


如果大家感觉此文对你有一些帮助,希望能点个赞,鼓励鼓励阿包,阿包会不断努力的。另外如果本文章有问题,或者对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!


相关文章
|
1月前
|
机器学习/深度学习 存储 算法
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
1月前
|
存储 算法 数据可视化
LeetCode 题目 96:从动态规划、递归到卡塔兰数实现不同的二叉搜索树
LeetCode 题目 96:从动态规划、递归到卡塔兰数实现不同的二叉搜索树
|
13天前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
6 0
|
1月前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
17 3
|
17天前
|
存储 算法 Java
力扣经典150题第四十五题:存在重复元素 II
力扣经典150题第四十五题:存在重复元素 II
10 0
|
2月前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
26 1
|
26天前
|
索引
leetcode题解:27.移除元素
leetcode题解:27.移除元素
19 0
|
2月前
|
存储
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
26 1
|
2月前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
33 1