题目要求
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
解题思路
这里边有一个我们需要的知识:
二叉搜索树按照中序遍历的结果就是一个递增的序列形式。
所以根据这个知识,我们只要按照中序遍历的思想,设置一个计数器就可以顺利的找到第k个小的节点了,这里有个大坑,就是返回的是节点!!!!不是节点的值,如果是节点的值那么直接中序遍历,然后输出第K个元素即可,这样好像更好理解一点。但是本题需要的是节点,所以我们需要一个计数器来告诉我们现在到了第几个节点,到第k个的时候就返回。
主要代码c++
class Solution {
public:
int count = 0; // 计数器
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot)
{
// 中序遍历的思想,只是需要节点而不是节点的值。
TreeNode* tmp = KthNode(pRoot->left, k);
if(tmp) return tmp;
count = count + 1;
if(count==k) return pRoot;
tmp = KthNode(pRoot->right,k);
if(tmp) return tmp;
}
return nullptr;
}
};