题目描述:给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。
1. 分析
二叉搜索树的特点:左子树小于根节点,右子树大于根节点。中序遍历即可。
思路:先递归调用左子树,看调用k次是否为空,若不为空,则此时访问的节点就是目标节点,否则递归调用右子树,直到调用k次,若此节点不为空,则此节点即为目标节点,否则就是没有目标节点,返回空指针。
2. 用C++写出逻辑:
class Solution {
int count = 0;
public:
TreeNode* KthNode(TreeNode* pRoot, int k) {
if(pRoot == nullptr)
return nullptr;
TreeNode* node = KthNode(pRoot -> left, k);
if(node) return node;
if(++count == k) return pRoot;
node = KthNode(pRoot -> right, k);
if(node) return node;
return nullptr;
}
};