hot100-41二叉搜索树中第K小的元素

一、题目

给定一个二叉搜索树的根节点root,和一个整数k,找出其中第k小的元素。

二、思路

1、二叉搜索树找第k小的数,中序遍历是升序数组,访问到第k个节点时,它的值就是答案。

三、代码

java 复制代码
class Solution {
    int res = 0,count;
    public int kthSmallest(TreeNode root, int k) {
        if(root == null) return 0;
        kthSmallest(root.left,k);
        if(++count == k) res = root.val;
        kthSmallest(root.right,k);
        return res;
    }
}

这个代码,找到了第k小的值仍然会遍历整个树。

下面是优化的代码

java 复制代码
class Solution {
    private int count = 0;
    private int result = 0;

    public int kthSmallest(TreeNode root, int k) {
        inorder(root, k);
        return result;
    }

    private void inorder(TreeNode node, int k) {
        if (node == null || count >= k) return; 

        inorder(node.left, k);

        count++;
        if (count == k) {
            result = node.val;
            return; 
        }

        inorder(node.right, k);
    }
}
相关推荐
NAGNIP3 小时前
万字长文!回归模型最全讲解!
算法·面试
知乎的哥廷根数学学派4 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
666HZ6665 小时前
数据结构2.0 线性表
c语言·数据结构·算法
实心儿儿6 小时前
Linux —— 基础开发工具5
linux·运维·算法
charlie1145141916 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
清木铎8 小时前
leetcode_day4_筑基期_《绝境求生》
算法
清木铎8 小时前
leetcode_day10_筑基期_《绝境求生》
算法
j_jiajia8 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法
源代码•宸8 小时前
Golang语法进阶(协程池、反射)
开发语言·经验分享·后端·算法·golang·反射·协程池
Jasmine_llq10 小时前
《CF280C Game on Tree》
数据结构·算法·邻接表·深度优先搜索(dfs)·树的遍历 + 线性累加统计