数据结构&算法——二叉搜索树
BST 的特性:
1、对于 BST 的每一个节点 node
,左子树节点的值都比 node
的值要小,右子树节点的值都比 node
的值大。
2、对于 BST 的每一个节点 node
,它的左侧子树和右侧子树都是 BST。
整体上BST也是基于递归的思想和方法,但额外的特性是中序遍历即有序
二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点
root
,和一个整数k
,请你设计一个算法查找其中第k
个最小元素(从 1 开始计数)。
/**
* 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:
int rank = 0;
int res = 0;
int kthSmallest(TreeNode* root, int k) {
traverse(root, k);
return res;
}
void traverse(TreeNode* root, int k)
{
if(root==nullptr)
{
return;
}
traverse(root->left, k);
rank++;
if(rank == k)
{
res = root->val;
return;
}
traverse(root->right, k);
}
};
中序遍历,维护当前节点的排序rank