Problem: 230. 二叉搜索树中第K小的元素
文章目录
题目描述
思路及解法
1.由二叉搜索树 的性质我们易得若中序遍历一棵二叉搜索树,则会得到一个递增的有序序列 ;
2.则我们中序遍历 一棵二叉搜索树,同时记录一个int变量rangk 每次在中序操作时让rank自增,等于k时直接结束递归并返回当前的节点值;
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为二叉搜索树的节点的个数
空间复杂度:
O ( h e i g h t ) O(height) O(height);其中 h e i g h t height height为二叉搜索树的高度
Code
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
//Records the final result
int res = 0;
//Records the location of the current in-order traversal node
int rank = 0;
/**
* Finds the KTH smallest element in a binary search tree
*
* @param root The root of binary tree
* @param k The given number
* @return int
*/
int kthSmallest(TreeNode* root, int k) {
if (root == nullptr) {
return 0;
}
inorderedTraver(root, k);
return res;
}
/**
* Inorder traversal function
*
* @param root The given number
* @param k The given number
*/
void inorderedTraver(TreeNode* root, int k) {
if (root == nullptr) {
return;
}
inorderedTraver(root -> left, k);
rank++;
if (rank == k) {
res = root -> val;
return;
}
inorderedTraver(root -> right, k);
}
};