您的位置:首页 > 其它

假设你正在读一串整数,每个一段时间,希望能找出数字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时,将它我往上返回。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: