class node{
public:
node* left,*right;
int val;
node(node* l,node* r,int v):left(l),right(r),val(v){}
};
class StreamRank {
public:
node* root;
StreamRank() {
root=nullptr;
}
void track(int x) {
if(!root) root=new node(nullptr,nullptr,x);
else insert(root,x);
}
int getRankOfNumber(int x) {
return count(root,x);
}
//向二叉搜索树中插入val
void insert(node* &u,int val){
if(!u){
u=new node(nullptr,nullptr,val);
return;
}
if(u->val<val) insert(u->right,val);
else insert(u->left,val);
}
//查找二叉搜索树中,≤val的节点个数
int count(node* u,int val){
if(!u) return 0;
if(u->val==val) return 1+count(u->left,val);
if(u->val<val) return 1+count(u->left,val)+count(u->right,val);
else return count(u->left,val);
}
};
/**
* Your StreamRank object will be instantiated and called as such:
* StreamRank* obj = new StreamRank();
* obj->track(x);
* int param_2 = obj->getRankOfNumber(x);
*/
面试题 10.10. 数字流的秩
最新推荐文章于 2024-10-16 10:13:45 发布
文章描述了一个名为StreamRank的类,它利用二叉搜索树的数据结构来跟踪整数并提供查询功能,可以计算给定数值在已跟踪数字中的排名。
摘要由CSDN通过智能技术生成