题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
解题思路
我们知道二叉排序树的中序遍历的结果是有序的,因此我们可以采用中序遍历的方法,设立一个index来记录我们遍历过的结点。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
int index = 0;
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot){
TreeNode* node = KthNode(pRoot->left, k); //往左子树递归
if(node) return node; //对于空结点直接返回,对于找到的结点(存在)就一直返回到最开始
index++;
if(index == k) return pRoot;
node = KthNode(pRoot->right, k);
if(node) return node;
}
return NULL; //如果index!=k,那么就会一直返回NULL,知道Index==k,返回结点,就不会执行到这里
}
};