一、题目
给定一个二叉搜索树的根节点root,和一个整数k,找出其中第k小的元素。

二、思路
1、二叉搜索树找第k小的数,中序遍历是升序数组,访问到第k个节点时,它的值就是答案。
三、代码
java
class Solution {
int res = 0,count;
public int kthSmallest(TreeNode root, int k) {
if(root == null) return 0;
kthSmallest(root.left,k);
if(++count == k) res = root.val;
kthSmallest(root.right,k);
return res;
}
}
这个代码,找到了第k小的值仍然会遍历整个树。
下面是优化的代码
java
class Solution {
private int count = 0;
private int result = 0;
public int kthSmallest(TreeNode root, int k) {
inorder(root, k);
return result;
}
private void inorder(TreeNode node, int k) {
if (node == null || count >= k) return;
inorder(node.left, k);
count++;
if (count == k) {
result = node.val;
return;
}
inorder(node.right, k);
}
}