思路分析:
因为给出的是二叉搜索树,其中序遍历的结果就是按照从小到大排序的,我们只需使用中序遍历,取其第k个元素即为第k小的元素。
用循环使root向左下移动,移动同时利用栈储存节点信息。通过获取栈顶元素,返回上一个节点,进行中序遍历。
代码实现(c++):
class Solution
{
public:
int kthSmallest(TreeNode* root, int k)
{
int p=0;
stack<TreeNode*> tree;
tree.push(root);
while(true)
{
while(root!=nullptr)
{
tree.push(root);
root=root->left;
}
root=tree.top();
tree.pop();
if(++p==k)
return root->val;
root=root->right;
}
}
};
运行结果: