每天学习一点算法 2026/03/14
题目:二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点
root,和一个整数k,请你设计一个算法查找其中第k小的元素(k从 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] }; -
根据二叉树的特性:每个节点的左子树的结点一定比这个节点小,右子树的结点一定比这个节点大,那么二叉树的中序遍历结果一定是递增的,所以我们可以省去排序的步骤
typescriptfunction 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)