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

在这里插入图片描述

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

package factory;

import sun.reflect.generics.tree.Tree;
import tree.TreeNode;

/**
 * @Description: 二叉搜索树中第K小的元素
 * 解法:二叉搜索树就是左节点<根节点<右节点,所有使用中序遍历的方式可以从小到大排除这个二叉树
 * https://leetcode-cn.com/explore/interview/card/top-interview-quesitons-in-2018/269/tree/1165/
 * @Author: Jaryn
 * @Date: 2019/12/10 16:43
 */
public class KthSmallest {
    static int num;
    static int count;

    public static void main(String[] args) {
        TreeNode treeNode3 = new TreeNode(3);
        TreeNode treeNode1 = new TreeNode(1);
        TreeNode treeNode4 = new TreeNode(4);
        TreeNode treeNode2 = new TreeNode(2);

        treeNode3.setLeft(treeNode1);
        treeNode3.setRight(treeNode4);
        treeNode1.setRight(treeNode2);
        System.out.println(kthSmallest(treeNode3, 1));

    }


    public static int kthSmallest(TreeNode root, int k) {
        num = 0;
        count = 0;
        recur(root, k);
        return num;
    }

    public static void recur(TreeNode node, int k) {
        if(node == null || count >= k) {
            return;
        }
        recur(node.getLeft(), k);
        if(count < k) {
            count++;
            num = node.getVal();
        }
        recur(node.getRight(), k);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值