2-3棵树,数据存储

时间:2010-12-20 09:01:35

标签: algorithm tree

大家好我想了解2-3棵树是如何工作的,我理解了关于密钥的概念,但是我在哪里实际存储数据本身,只在叶子中,或在具有1个密钥的节点(内部节点)中,以及2个键(内部节点)也,提前谢谢

3 个答案:

答案 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