提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
3月7日练习内容
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目-二叉搜索树中第K小的元素
1.题目描述
给定一个二叉搜索树的根节点 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.思路与代码
2.1 思路
1.由于二叉搜索树的中序遍历为一个有序的数组,根据该性质遍历二叉树,
2.中序遍历二叉树
3.全局遍历计数器,每进行一次递归,计数器减一,直到计数器为0,则找到第k小数
4.输出第k小数
2.2 代码
代码如下(示例):
/**
* 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 target = 0;
//辅助记数器
int count = 0;
public int kthSmallest(TreeNode root, int k) {
count = k;
//由于二叉搜索树的中序遍历是有序数组
//这里应用中序遍历对树进行查找以及遍历
inOrderTraversal(root);
return target;
}
//中序遍历
public void inOrderTraversal(TreeNode root){
//退出递归条件
if(root == null){
return;
}
//遍历左子树
inOrderTraversal(root.left);
//查找第k小数
if(--count == 0){
target = root.val;
}
//遍历右子树
inOrderTraversal(root.right);
}
}
总结
提示:这里对文章进行总结: