问题:现在我们要读入一串数,同时要求在读入每个数的时候算出它的秩,即在当前数组中小于等于它的数的个数(不包括它自身),请设计一个高效的数据结构和算法来实现这个功能。 给定一个int数组A,同时给定它的大小n
分析:顺序读入一串数据,读入当前数求秩,秩存在于该数据之前的数据流中,这类似于构建一个二叉排序树过程,并在该过程中计算当前结点所在的位置。在构造二叉排序树的过程中,每个树节点保存其左子树的个数。
class TreeNode {
TreeNode left;
TreeNode right;
int leftSize = 0;
int val;
TreeNode(int val) {
this.val = val;
}
TreeNode() {
}
public void insert(int val) {
if (this.val > val) {
if (left != null) {
left.insert(val);
} else {
left = new TreeNode(val);
}
leftSize++;
} else {
if (right != null) {
right.insert(val);
} else {
right = new TreeNode(val);
}
}
}
public int getRank(int val) {
if (this.val > val) {
if (left != null) {
return left.getRank(val);
} else {
return 0;
}
}else if(this.val<val){
if(right!=null){
return right.get