这是 2-3 树的确切定义

which is the exactly definition of 2-3 tree

抱歉,我不会post图片,所以我用键盘打印它们。

                             [6:-]

               [2:4]                        [8:-]      

     [0:1]     [2:3]    [4:5]         [6:7]       [8:9]

这个来自《数据结构与算法》,是2-3树的图,可以看到父节点上的每一个数据都必须在子节点上。

                             [50:90]

      [20:-]                 [70:-]                  [120:150]

[10:-]    [30:40]       [60:-]    [80:-]    [100:110]   [130:140]   [160:-]  

而这个是另一本书《data abstraction and problem solving with c++》的,父节点上的数据不在子节点上。

哪一个是正确的?

这些都是 2-3 棵树,因为“2-3”只是指每个节点具有的 children 个数。但是这些树有不同的更具体的名称。

第一个,其中 parents 从 children 复制密钥,称为 "B+ tree":https://en.wikipedia.org/wiki/B%2B_tree

第二个 parent 键不是副本,称为 "B tree":https://en.wikipedia.org/wiki/B-tree

请注意,通常有与键关联的值,而在 B+ 树中,内部节点不包含值。

B+ 树在文件系统支持的数据库索引中很流行。因为内部节点不包含值,它们可以有更高的fan-out,降低树的高度并使访问更快。

叶节点通常也不实际存储值——它们存储指向值存储位置的指针,这方便地为 B+ 树的叶节点提供了与内部节点完全相同的结构。