『LeetCode|每日一题』---->二叉搜索树中第K小的元素

目录

1.每日一句

2.作者简介

3.二叉搜索树简介

『LeetCode|每日一题』二叉搜索树中第K小的元素

1.每日一题

4.解题思路

        4.1 思路分析

         4.2 核心代码

        4.3 完整代码

        4.4 运行结果


1.每日一句

因为时间永远分岔,通往无数的未来

2.作者简介

 🏡个人主页:XiaoXiaoChen-2716

📚学习专栏:力扣专栏

🕒发布日期:2022/10/11

3.二叉搜索树简介

二叉搜索树又叫二叉排序树,顾名思义,就是树中的数据已经做好了排序,排序规则是这样的:如果一个根节点有左子树,那么左子树的节点值肯定小于根节点的值,如果一个根节点有右子树,那么右子树的节点值一定大于根节点的值。同样根节点的左子树右子树同样为二叉排序树 

在这里插入图片描述

『LeetCode|每日一题』二叉搜索树中第K小的元素

1.每日一题

原文链接--->点我

4.解题思路

        4.1 思路分析

通过上文对二叉搜索树的简要特点了解,于是想到了一个最笨的方法——中序遍历,每找到一个节点则计数器加一

        S1:写一个函数用来中序遍历,传参的参数同样是节点和K的值,同时需要定义两个整型变量,这里为了方便我定义的全局变量res和count,count就是计数器;

        S2:首先二叉搜索树的左子树的值小一些,所以我们先从左子树开始遍历,也就是把root.left作为第一次遍历的参数,这个节点遍历之后,要把计数器count加一;

        S3:左子树的第一个节点遍历完之后,要把计数器count和k作比较,如果相等,说明找到了这个节点,把这个值赋值给res即可,如果不相等,那么此时应该遍历右子树,因为右子树的值比根节点大,即把root.right传参进去,递归调用此函数;

        S4:还有一个特殊情况,如果root为空,那么就没有递归调用的必要了,直接返回就可以了

        S5:如此循环,直到计数器count的值等于k就说明找到了第k小的节点值 

         4.2 核心代码

    private void mid_search(TreeNode root , int k){
        if(root == null) return;
        mid_search(root.left , k);
        count++;
        if(count == k){
            res = root.val;
            return;
        }
        mid_search(root.right , k);
    }

        4.3 完整代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int res , count = 0;
    public int kthSmallest(TreeNode root, int k) {
        mid_search(root , k);
        return res;
    }
    private void mid_search(TreeNode root , int k){
        if(root == null) return;
        mid_search(root.left , k);
        count++;
        if(count == k){
            res = root.val;
            return;
        }
        mid_search(root.right , k);
    }
}

        4.4 运行结果

总之解题的核心思路就是围绕二叉搜索树这个特点来的,读者可以试一试找到第K大的节点,是不是也是类似的方法呢?


🍁 类似题目推荐:

1.数据结构基础 

2.算法专项练习

3.剑指offer专项练习

4.推荐一个学习网站:LeetCode,算法的提升在于日积月累,只有每天练习才能保持良好的状态

如果文章对各位大佬有帮助就支持一下噢,新手尝试,不好的地方请各位大佬多多指教! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值