二叉搜索树中序遍历递增,要得到第K小的数明显进行中序遍历即可,而第K大的数类似,可以通过中序遍历的逆序来得到。
// 调用node* res = getKthMinNodeOfBST(root,k);
node* getKthMinNodeOfBST(node* root,int k) {
static int curNum = 1;
//这里使用静态变量记录当前的位置,注意静态变量只初始化一次
if (!root) {
return NULL;
}
node *left = getKthMinNodeOfBST(root->lchild, k);
if (left) {
return left;
}
if (curNum == k) {
return root;
}
curNum++;
node* right = getKthMinNodeOfBST(root->rchild, k);
if (right) {
return right;
}
}
调用int curNum = 1;
node* res = getKthMaxNodeOfBST(root,curNum,k);
//没有通过静态变量,通过参数来记录当前位置
node* getKthMaxNodeOfBST(node* root, int& curNum, int k) {
if (nullptr == root) {
return nullptr;
}
node* right = getKthMaxNodeOfBST(root->rchild, curNum, k);
if (right) {
return right;
}
if (curNum == k) {
return root;
}
curNum++;
node* left = getKthMaxNodeOfBST(root->lchild, curNum, k);
if (left) {
return left;
}
else {
return NULL;
}
}