题目
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
思路
1.递归
中序遍历数组
class Solution {
public:
int n=0;
int res;
int kthSmallest(TreeNode* root, int k)
{
dfs(root,k);
return res;
}
void dfs(TreeNode* root,int k)
{
if(root==nullptr)
return ;
dfs(root->left,k);
n++;
if(n==k)
res=root->val;
dfs(root->right,k);
}
};
解答情况:
2.迭代
class Solution {
public:
int kthSmallest(TreeNode* root, int k)
{
stack<TreeNode*>sk;
int res;
int n=0;
while(!sk.empty()||root)
{
while(root)
{
sk.push(root);
root=root->left;
}
root=sk.top();
sk.pop();
n++;
if(n==k)
return root->val;
root=root->right;
}
return 0;
}
};
解答情况: