题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 24 6 8 中,按结点数值大小顺序第三个结点的值为4。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
//中序遍历
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if (pRoot == nullptr || k <= 0)
return nullptr;
int i = 0;
return KthNodeCore(pRoot, k, i);
}
private:
TreeNode* KthNodeCore(TreeNode* p, int k , int &i)
{
if (p == nullptr)
return nullptr;
TreeNode *ret = nullptr;
ret = KthNodeCore(p->left, k, i);
if (ret != nullptr)
return ret;
++i;
if (i == k)
return p;
return KthNodeCore(p->right, k, i);
}
};