您的位置:首页 > 其它

每天一道LeetCode-----寻找二叉搜索树中第k小的元素

2017-12-21 15:22 627 查看

Kth Smallest Element in a BST

原题链接Kth Smallest Element in a BST



给顶一个二叉搜索树的根节点,找到这棵数第k小的值

两种方法

递归法的中序遍历

迭代法的中序遍历

递归法,常规的中序遍历

代码如下

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
int res = 0;
inOrder(root, k, res);
return res;
}
private:
void inOrder(TreeNode* root, int& k, int& res)
{
if(!root || !k) return;
inOrder(root->left, k, res);
//找到k个数即可
if(--k == 0)
res = root->val;
inOrder(root->right, k, res);
}
};


迭代法,用栈实现

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
stack<TreeNode*> s;
pushAllLeft(root, s);
TreeNode* top = nullptr;
while(k--)
{
top = s.top();
s.pop();
//每弹出一个节点就将该节点的右子树的左边一列入栈
pushAllLeft(top->right, s);
}
return top->val;
}
private:
void pushAllLeft(TreeNode*root, stack<TreeNode*>& s)
{
while(root)
{
s.push(root);
root = root->left;
}
}
};


本题主要考察中序遍历,除了递归法最好可以熟悉迭代法的求解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode
相关文章推荐