题目:
给定一棵二叉搜索树,请找出其中的第k小的结点。
输入:{5,3,7,2,4,6,8},3
返回值:{4}
说明:按结点数值大小顺序第三小结点的值为4
思路:
- 首先二叉搜索树特点左小右大,所以如果是中序遍历的话,正好是一个升序序列
- 所以我们可以在中序遍历的基础上同时计数,第K小=从小到大第K个
代码:
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private int count = 0;
TreeNode KthNode(TreeNode pRoot, int k) {
if(pRoot == null || k <= 0) return null;
return dfs(pRoot, k);
}
private TreeNode dfs(TreeNode root, int k){
if(root==null) return null;
TreeNode left = dfs(root.left, k);
if (left!=null) return left;
count++;
if(count==k) return root;
return dfs(root.right, k);
}
}