【 每天学习一点算法 2026/03/14】二叉搜索树中第K小的元素

每天学习一点算法 2026/03/14

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

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

  1. 首先想到的就是先遍历,再排序,再找到第 k 小的元素

    typescript 复制代码
    /**
     * Definition for a binary tree node.
     * class TreeNode {
     *     val: number
     *     left: TreeNode | null
     *     right: TreeNode | null
     *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
     *         this.val = (val===undefined ? 0 : val)
     *         this.left = (left===undefined ? null : left)
     *         this.right = (right===undefined ? null : right)
     *     }
     * }
     */
    
    function kthSmallest(root: TreeNode | null, k: number): number {
      const res: number[] = []
      function helper (root: TreeNode | null) {
        if (root === null) return null
        res.push(root.val)
        helper(root.left)
        helper(root.right)
      }
      helper(root)
      return res.sort((a, b) => a - b)[k - 1]
    };
  2. 根据二叉树的特性:每个节点的左子树的结点一定比这个节点小,右子树的结点一定比这个节点大,那么二叉树的中序遍历结果一定是递增的,所以我们可以省去排序的步骤

    typescript 复制代码
    function kthSmallest(root: TreeNode | null, k: number): number {
      const res: number[] = []
      function helper (root: TreeNode | null) {
        if (root === null) return null
        helper(root.left)
        res.push(root.val)
        helper(root.right)
      }
      helper(root)
      return res[k - 1]
    };

题目来源:力扣(LeetCode)

相关推荐
Hrain-AI8 分钟前
企业 AI 治理运营怎么做:分级授权、Token 用量可观测与模型统一纳管
大数据·人工智能·算法
kyrie_sakura31 分钟前
python学习笔记 7--- 文件(IO)操作
笔记·python·学习
剑指offer.34 分钟前
Linux多任务-线程篇
java·jvm·算法
xiaoxiangsiyan39 分钟前
网络智能化转型核心模块全解析
运维·服务器·网络·数据库·学习·架构·php
nike0good1 小时前
CF 126B(Password-z algorithm/exkmp)
开发语言·c++·算法
minglie11 小时前
espidf的iic波特律动oled
学习
无定义_1 小时前
Bellman-Ford——贝尔曼福特算法
数据库·算法
MartinYeung51 小时前
[论文学习]智能合约不变式防御网络犯罪
网络·学习·智能合约
xx~t1 小时前
嵌入式学习——进程与线程2
linux·c语言·学习·进程与线程
我爱cope2 小时前
【计算机网络 | 网络层10:OSPF 与 BGP:自治系统内部和互联网之间如何路由?】
网络·学习·计算机网络·智能路由器