1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > LeetCode 230. 二叉搜索树中第K小的元素(中序遍历)

LeetCode 230. 二叉搜索树中第K小的元素(中序遍历)

时间:2021-01-17 06:35:11

相关推荐

LeetCode 230. 二叉搜索树中第K小的元素(中序遍历)

文章目录

1. 题目信息2. 解题2.1 中序递归2.2 中序循环写法

1. 题目信息

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明:

你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

示例 1:输入: root = [3,1,4,null,2], k = 13/ \1 4\2输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 35/ \3 6/ \2 4/1输出: 3

进阶:

如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?

来源:力扣(LeetCode)

链接:https://leetcode-/problems/kth-smallest-element-in-a-bst

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

二叉搜索树中序输出是非降序列

2.1 中序递归

class Solution {public:int kthSmallest(TreeNode* root, int k) {int i = 0, ans;bool found = false;findkth(root,k,i,ans,found);return ans;}void findkth(TreeNode* &root, int &k, int &i, int &ans, bool &found){if(root == NULL || found)return;findkth(root->left,k,i,ans,found);i++;if(i == k){ans = root->val;found = true;}findkth(root->right,k,i,ans,found);}};

2.2 中序循环写法

class Solution {public:int kthSmallest(TreeNode* root, int k) {int ans,count = 0;stack<TreeNode*> stk;while(root || !stk.empty()){while(root){stk.push(root);root = root->left;}if(!stk.empty()){root = stk.top();stk.pop();if(++count == k)return root->val;root = root->right;}}return -1;}};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。