我正在阅读有关从Rober Sedgewik实施B-Tree的内容,并通过此链接在else
方法的search
部分找到此代码段:http://algs4.cs.princeton.edu/62btrees/BTree.java.html
// internal node
else {
for (int j = 0; j < x.m; j++) {
if (j+1 == x.m || less(key, children[j+1].key))
return search(children[j].next, key, ht-1);
}
}
我撞了我的头但却无法理解为什么他直接开始将key
与j+1
的{{1}}元素进行比较而不是children
。
有人可以通过这个具体的观点来解释一下吗?
答案 0 :(得分:1)
如果您查看他对less()
方法的声明,您会发现它使用了compareTo
。
基本上,他想做的是key.compareTo(children[j+1].key)
但为什么他会使用j+1
代替j
?要理解这一点,请查看条件陈述的第一部分;他使用j+1 == x.m
,这意味着他想测试j + 1是否是极限。如果j+1 = x.m
,他不想继续增加j,所以他返回。但是,如果它还不是限制,请检查将当前密钥与列表中的下一个密钥进行比较(因为存在下一个密钥)。如果列表中的下一个键比当前键“少”,则搜索当前键。
简而言之:
如果j+1
不存在,则if语句的前半部分将捕获它并且它将突破for
循环。否则,请检查j+1
的密钥。