大家好我想了解2-3棵树是如何工作的,我理解了关于密钥的概念,但是我在哪里实际存储数据本身,只在叶子中,或在具有1个密钥的节点(内部节点)中,以及2个键(内部节点)也,提前谢谢
答案 0 :(得分:1)
有些例子中数据本身只存储在树叶中,内部节点存储路标(参见数据结构和算法,由Aho,Hopcroft& Ullman提供)i
数据结构,插入和删除算法是相同的(但是对于细节),虽然空间req'd可能是上面列出的示例的两倍,但树的高度只会增加1,所以,你仍然有非常好的查找时间。
答案 1 :(得分:0)
我不是这个树结构的专家,但是2-3 Trees上维基百科页面的第一句似乎回答了关于数据存储位置的问题:
计算机科学中的一棵2-3树是一棵树 数据结构的类型,树在哪里 每个有孩子的节点(内部 node)有两个孩子和一个孩子 数据元素(2个节点)或三个 儿童和两个数据元素 (3-节点)。
在我看来,您将数据存储在树的每个节点中。 Wiki页面还有一个指向Java Applet demonstrating inserts的链接。
编辑:在阅读你的评论之后,再看一些示例代码,我倾向于认为你的数据和密钥(正如你所说的那样)是相同的(正如Chowlett在他们的回答中提到的那样)。
看看这个sample code(它们只存储整数)我会创建一个twoThreeNode类,它保存指向你存储的数据的指针,确保数据类重载比较运算符以允许对它们进行排序。然后像以前一样遵循算法。
我在这里找到了一篇有趣的文章,包含源代码:Balanced Trees, Part 2: Interior 2-3 Trees
答案 2 :(得分:0)
免责声明:我没有使用过这种数据结构;但是Wikipedia article非常清楚。
数据存储为每个节点(内部或叶子)上的1或2个字段;我认为你所谓的“密钥”正是你想要存储的数据。每个有2个子节点的内部节点都有一个数据项;该项目大于其左子项下的所有项目,以及来自其右子项(left < data <= right
)的所有项目的小于或等于该项目。对于3子节点,数据是:left < data_1 <= middle < data_2 <= right
。