假设你正在读一串整数,每个一段时间,希望能找出数字x的秩(小于或等于x的值的数目)
2015-09-04 21:29
274 查看
int getRank(Node node,int x)
{
if x is node.data
return node.leftSize()
if x is on left of node
return getRank(node.left,x)
if x is on right of node
return node.leftSize()+1+getRank(node.right,x)
}
下面是完整的代码:
public class Question{
private static RankNode root=null;
public static void track(int number)
{
if(root==null)
{
root=new RankNode(number);
}
else
{
root.insert(number);
}
}
public static int getRankOfNumber(int number)
{
return root.getRank(number);
}
}
public class RankNode
{
public int left_size=0;
public RankNode left,right;
public int data=0;
public RankNode(int d)
{
data=d;
}
public void insert(int d)
{
if(d<=data)
{
if(left!=null)
left.insert(d);
else
left=new RankNode(d);
left_size++;
}
else
{
if(right!=null)
right.insert(d);
else
right=new RankNode(d);
}
}
public int getRank(int d)
{
if(d==data)
{
return left_size;
}
else if(d<data)
{
if(left==null) return -1;
else
return left.getRank(d);
}
else
{
int right_rank=right==null ? -1 : right.getRank(d);
if(right_rank==-1) return -1;
else
return left_size+1+right_rank;
}
}
}
注意上面的代码是怎么处理d不在树里的情况的,我们会检查返回值是否为-1,当发现位-1时,将它我往上返回。
相关文章推荐
- 快速排序的一种方法
- JAX-WS(二)之使用wsimport创建WebService客户端
- bzoj 3309 DZY Loves Math
- 将vim初步配置可以编译的编辑器(for windows)
- 欧拉工程第63题:Powerful digit counts
- C语言字符串操作函数整理
- [HDU 2692] Ball · 二分答案+最短路
- 10622 - Perfect P-th Powers(唯一分解定律)
- 漫谈理想
- 关于磁盘缓存与磁盘缓冲区的理解与延伸
- JQ简单案例
- KMP算法
- 快捷键
- 5道经典的程序题 (4)
- wamp2.5(Apache2.4.9+PHP5.5.12)关于多站点的配置
- android 自定义属性
- UI控件圆角设置
- Linux(Ubuntu)下面SecureCRT 完全破解
- 敬业与乐业
- 学生管理系统——基于双向循环链表