题目
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
思路
将一棵二叉搜索树进行中序遍历,可以得到该树的有序序列。我们在每次经过一个节点的时候就进行计数,等到计数数值等于k,表明当前数字是我们要寻找的数,即可返回!
代码
class Solution {
public int kthSmallest(TreeNode root, int k) {
// 计数器
int count=0;
// 结果
int ans=-1;
Stack<TreeNode> stack = new Stack<>();
// 对树进行中序遍历
while(root!=null || !stack.isEmpty())
{
while(root!=null)
{
stack.push(root);
root=root.left;
}
root=stack.pop();
++count;
// 一旦计数数值到达了k,表明我们要寻找的数字找到了
if(count==k)
{
ans =root.val;
break;
}
root=root.right;
}
return ans;
}
}
结果
这个速度就还算挺快的!