【算法训练】LeetCode#230 二叉搜索树中第K小的元素

一、描述

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

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

示例 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个。但是既然已经遍历到最深层了,是不是可以在遍历的时候就计数,当达到第k个时返回呢?尝试一下

三、解题

public static 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;
    }
}
public static class Solution {
    int sums = 0;
    int ans = 0;
    boolean over = false;
    public int kthSmallest(TreeNode root, int k) {
        process(root,k);
        return ans;
    }

    // 中序遍历树,并记录当前为第几个节点cur,当cur==k时返回val
    public void process(TreeNode root,int k){
        if (over){
            return;
        }
        if (root == null){
            return ;
        }
        process(root.left,k);
        sums++;
        if (sums == k){
            ans = root.val;
            over = true;
            return ;
        }
        process(root.right,k);
    }
}
posted @ 2023-01-10 20:52  小拳头呀  阅读(15)  评论(0编辑  收藏  举报