给定一个二叉搜索树的根节点 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
�
二叉搜索树的中序遍历结果是一个升序序列
利用二叉搜索树的中序遍历是一个升序序列的特性,即可从中序遍历序列中获取第 k 小的元素
/**
* 利用二叉搜索树的中序遍历结果是一个升序序列的特性,从中序遍历序列中获取
* @param root
* @param k
* @return
*/
public int kthSmallest(TreeNode root, int k) {
List<Integer> valList = new ArrayList<>();
inOrder(root, valList);
return valList.get(k - 1);
}
/**
* 二叉搜索树的中序遍历结果是一个升序序列
*
* @param node
* @param valList
*/
private void inOrder(TreeNode node, List<Integer> valList) {
if (node == null) {
return;
}
inOrder(node.left, valList);
valList.add(node.val);
inOrder(node.right,valList);
}