B树实施

时间:2015-01-19 17:58:14

标签: java algorithm data-structures tree b-tree

我正在阅读有关从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);
            }
        }

我撞了我的头但却无法理解为什么他直接开始将keyj+1的{​​{1}}元素进行比较而不是children。 有人可以通过这个具体的观点来解释一下吗?

1 个答案:

答案 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的密钥。