📌  相关文章
📜  教资会网络 | UGC NET CS 2015 年 12 月 – II |问题 6(1)

📅  最后修改于: 2023-12-03 15:26:03.033000             🧑  作者: Mango

UGC NET CS 2015年12月 – II | 问题6

这是一道面试题目,主要考察计算机科学和编程方面的知识。对于程序员来说,这道题目也是一个不错的练习题目。我们一起来看看这道题目的解题思路。

问题描述

给定一棵二叉搜索树,查找其中第K个最小的元素。

思路分析

题目中给出的二叉搜索树具有如下性质:

  • 左子树中所有节点的值都小于根节点的值;
  • 右子树中所有节点的值都大于根节点的值;
  • 左右子树也是二叉搜索树。

可以使用中序遍历的方式,按照从小到大的顺序访问二叉树中的元素。在代码实现时,可以使用递归方式遍历二叉树,并记录已经访问的节点数目,直到找到第K个最小的元素为止。

代码实现
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

public class Solution {
    private int count = 0;
    private int result = 0;
    
    public int kthSmallest(TreeNode root, int k) {
        inorderTraversal(root, k);
        return result;
    }
    
    private void inorderTraversal(TreeNode node, int k) {
        if (node == null || count >= k) {
            return;
        }
        inorderTraversal(node.left, k);
        count++;
        if (count == k) {
            result = node.val;
            return;
        }
        inorderTraversal(node.right, k);
    }
}

以上是Java语言实现的代码。我们定义了一个TreeNode类表示二叉树节点,然后在Solution类中实现了kthSmallest方法。该方法使用中序遍历的方式遍历二叉树,并判断当前节点是否为第K个最小的元素。遍历过程中,我们记录已经访问的节点数目count,直到找到第K个最小的元素为止,将结果存储在变量result中并返回即可。