LeetCode 230. 二叉搜索树中第 K 小的元素

题目描述

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false

示例

示例 1:

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

示例 2:

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

解法

1.辅助数组

解题思路

创建一个数组,中序遍历链表,把二叉树中的元素依次加入数组中,由于二叉搜索树性质,得到的数组是非减的,这样就可以直接返回第K小的元素。

cpp 复制代码
class Solution {
public: 
    int kthSmallest(TreeNode* root, int k) {
        vector <int> temp;
        Helper(root,temp);
        return temp[k - 1];
    }


    void Helper(TreeNode* root,vector <int>& temp){
        if(!root) return;
        Helper(root -> left,temp);
        temp.push_back(root -> val);
        Helper(root -> right,temp);
        return;
    }
};

时间复杂度O(N),空间复杂度O(N)

2.计数法

解题思路:

如果要求不占用额外空间,则我们需要设计一个计数器,计数器达到k时,立马返回节点的值。

cpp 复制代码
class Solution {
public: 
    int count = 0;
    int kthSmallest(TreeNode* root, int k) {
        int ans;
        Helper(root,ans,k);
        return ans;
    }


    void Helper(TreeNode* root,int &ans,int k){
        if(!root) return;
        Helper(root -> left,ans,k);
        count ++;
        if(count == k){
            ans = root -> val;
            return;
        }
        Helper(root -> right,ans,k);
    }
};

时间复杂度O(N),空间复杂度O(1)

相关推荐
菜鸟‍13 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
退休倒计时15 小时前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
popcorn_min15 小时前
Digits 手写数字识别:随机森林多分类 + 像素级特征热力图
算法·随机森林·分类
liulilittle16 小时前
拥塞控制:排水终止的两种决策:OR 与 AND
网络·tcp/ip·计算机网络·算法·信息与通信·tcp·通信
weixin_3077791316 小时前
从脚本执行到智能体协作:AI辅助测试能力的范式重构
运维·开发语言·人工智能·算法·测试用例
量化君也16 小时前
从回测到全自动实盘交易,全天候策略需要经历哪些改造?
大数据·人工智能·python·算法·金融
fox_lht17 小时前
第十五章 函数式语言:迭代器和闭包
开发语言·后端·学习·算法·rust
zhengzhouliuhaha18 小时前
智能医疗设备控费系统:以全院一体化管控,筑牢医疗资源“安全阀”
大数据·数据结构·人工智能·算法·安全·机器学习·软件需求
June`18 小时前
CUDA程序效率如何计算以及工具如何使用
算法·cuda
兰令水18 小时前
leecodecode【树形DP】【2026.6.11打卡-java版本】
java·算法·深度优先