力扣230
力扣刷题 13

力扣230.二叉搜索树中第k个小的元素

首先还是放一下原题力扣230,下面是题目描述:
a1378102-b99d-4c48-b6f5-8cefd6385422.png
题目给的是一个二叉搜索树,想让我们找到从小到大的第k个元素。今天这道题比较简单,今天也只做了这一道题,算是休息一下。不过要是第一次做这类题可能一下想不到思路,可能会去遍历然后排序,或者用优先队列。不过我们根据昨天力扣98题的思路,二叉搜索树中序遍历是有序的,所以我们可以直接中序遍历,找到第k个元素就行了。下面是代码实现,递归一次百分百:

class Solution {
    private int k;
    private int s=0;
    private int kthSmallestRes=0;
    public int kthSmallest(TreeNode root, int k) {
        this.k=k;
        kthLargestM(root);
        return kthSmallestRes;
    }
    
    public void kthLargestM(TreeNode root) {
        if (root.left==null&&root.right==null) {
            if (s<k){
                s++;
                if (s==k){
                    kthSmallestRes=root.val;
                }
            }
            return;
        }
        if (root.left!=null){
            kthLargestM(root.left);
        }

        if (s<k){
            s++;
            if (s==k){
                kthSmallestRes=root.val;
                return;
            }
        }
        
        if (root.right!=null){
            kthLargestM(root.right);
        }
    }
}

代码比较简单,理解起来问题应该不大,有问题可以直接评论区问我。

力扣230
https://www.than.pw/archives/%E5%8A%9B%E6%89%A3230
作者
than
发布于
更新于
许可