题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
解题思路
二叉搜索树的中序遍历是顺序结构,利用中序遍历即可求解。
AC代码
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k) {
if (k < 0 || pRoot == nullptr) {
return nullptr;
}
N = k;
InOrder (pRoot);
return res;
}
void InOrder (TreeNode* r) {
if (r == nullptr || tag) {
return;
}
InOrder (r->left);
++n;
if (n == N) {
res = r;
tag = true;
return;
}
InOrder (r->right);
}
int N {0};
int n {0};
bool tag {false}; // 找到的标记,提前结束没必要的搜索
TreeNode* res {nullptr};
};