java - B树实现

标签 java algorithm data-structures tree b-tree

我正在阅读 Rober Sedgewik 的关于实现 B-Tree 的内容,并在 search 方法的 else 部分中找到了这个片段,来自这个链接: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);
            }
        }

我撞了脑袋,不明白他为什么直接开始比较keychildrenj+1元素,而不是<第 j 个代码。 有人可以通过一些关于这个特定点的信息吗?

最佳答案

如果您查看他对 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 的 key 。

关于java - B树实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28030819/

相关文章:

java - "@Where"和 "cascade = CascadeType.ALL"不同时工作

java - 为什么这个程序会抛出 java.lang.UnsupportedOperationException

java - 用java解析xml DOM子节点

java - 在java中实现这个变量

java - JTransforms FFT : Difference between even and odd-case

c++ - 无符号整数的快速无分支最大值

java - 将私有(private)类用于链表的正确方法

java - 如何获取所有用户文件夹 Box API v2

java - 比较两个数据结构并建议最佳匹配

c++ - 如何打印 Trie 中的所有单词?