我很难理解这个代码按大小排列节点。 Rank返回小于键的所有节点的大小。
http://algs4.cs.princeton.edu/32bst/BST.java.html
如何为rank(key,x.left)返回结果?
代码:
public int rank(Key key) {
return rank(key, root);
}
// Number of keys in the subtree less than key.
private int rank(Key key, Node x) {
if (x == null) return 0;
int cmp = key.compareTo(x.key);
if (cmp < 0) return rank(key, x.left);
else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right);
else return size(x.left);
}
// is the symbol table empty?
public boolean isEmpty() {
return size() == 0;
}
// return number of key-value pairs in BST
public int size() {
return size(root);
}
// return number of key-value pairs in BST rooted at x
private int size(Node x) {
if (x == null) return 0;
else return x.N;
}
答案 0 :(得分:0)
请注意,rank不返回条目(节点值),而是表示给定Key与候选Node的左子树之间的比较的值({{3}中节点的最左侧值) })。
它返回的值源于标准binary search tree的实现:如果第一个元素小于第二个元素则为负整数,如果它大于则为正数,如果它们相等则为0。
在这种特殊情况下,返回的确切数字表示要比较的两个键之间的距离(差异),这可能对使用比较结果的代码有用 - 通常是排序算法。