题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
分析
二叉搜索树的中序遍历就是一个排序序列,找出来k个数就行了
代码实现
TreeNode* KthNode(TreeNode* root, int k)
{
if(root==NULL)
return NULL;
stack<TreeNode*>S;
TreeNode*p = root;
int n = 0;
while(!S.empty()||!(p==NULL)){
while(p!=NULL){
S.push(p);
p=p->left;
}
if(!S.empty()){
p=S.top();
n++;
if(n==k){
return p;
}
S.pop();
p=p->right;
}
}
return NULL;
}