题目链接:二叉搜索树中第K小的元素
题目描述:
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
这是leetcode的二叉树的结点定义
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;
}
}
二叉搜索树的中序遍历的结果是一个有序的数组,找到二叉搜索树中第K小的元素,就是在遍历数组中找到第k个元素值即可,我们可以用递归中序遍历这棵二叉搜索树,在递归的时候找出前k个元素存储在一个arr数组中,当数组存储到第k个的时候退出递归调用,这个arr数组的长度可以定义为k,同时还需要一个下标index指向当前要填的地方每填一个数index++,当index ==arr.length即越界的时候结束递归过程,下面是代码:
class Solution {
public int[] arr;
public int index;
public int kthSmallest(TreeNode root, int k) {
arr = new int[k];
index = 0;
traverse(root);
return arr[k-1];
}
public void traverse(TreeNode root){
if(root == null) return ;
traverse(root.left);
if(index == arr.length) return;
else arr[index++] = root.val;
traverse(root.right);
}
}