题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4
思路
- 二叉搜索树的特性:左<根<右
- 解题首先想到:用中序遍历(左根右)即可拿到从小到大的序列
- 在中序遍历过程中,只要节点不为null,即count++,直到count==k时,返回当前节点
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot == null || k == 0){
return null;
}
return KthNode(pRoot, k, new int[1]);
}
TreeNode KthNode(TreeNode pRoot, int k, int[] count){
TreeNode node = null;
if (pRoot.left != null) {
node = KthNode(pRoot.left, k, count);
}
count[0]++;
if (count[0] == k) { //判断是否是第k个节点
node = pRoot;
}
//当左子树中的节点和根节点都不满足要求时,才在右子树进行查找
if (node == null && pRoot.right != null) {
node = KthNode(pRoot.right, k, count);
}
return node;
}
}