剑指Offer——二叉搜索树的第k个结点

时间:2024-07-20 11:34:08

题目描述:

给定一颗二叉搜索树,请找出其中的第k大的结点。

例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4

分析:

二叉搜索树中序遍历就是从小到大。只要遍历k个结点就可以了。

代码:

 /*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
int cnt = ;
TreeNode* KthNode(TreeNode* pRoot, int k) {
if(pRoot) {
TreeNode* kthNode = KthNode(pRoot->left, k);
if(kthNode) return kthNode;
if(++cnt == k) return pRoot;
kthNode = KthNode(pRoot->right, k);
if(kthNode) return kthNode;
}
return NULL;
}
};