中序遍历的顺序是左根右,要求倒数第k个节点,我们可以将左根右遍历转换成右根左遍历,然后求其正数第k个节点即可。
//用户接口
int getVal(int k)
{
Node *node = getVal(root_, k);
if (node == nullptr)
{
string err = "no No";
err += k;
throw err;
}
else
{
return node->data_;
}
}
//系统实现接口
//求BST树中序遍历倒数第k个节点实现 LVR -> RVL
int i = 1;
Node* getVal(Node *node,int k)
{
if (node == nullptr)
{
return nullptr;
}
Node *right = getVal(node->right_, k);
if (right != nullptr)
{
return right;
}
if (i++ == k)
{
return node;
}
return getVal(node->left_, k);
}