【发布时间】:2016-02-21 03:24:31
【问题描述】:
抱歉,我不能发图片,所以我用键盘打印出来。
[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:-]
这个来自另一本书《数据抽象和用c++解决问题》,父节点上的数据不在子节点上。
哪个是对的?
【问题讨论】:
-
它们可能都有效。顶部允许重复(只需将它们放在右子树中)。底部没有任何重复项,但没有显示如何处理重复项。您可以编写一个 2-3 树来拒绝重复值,在这种情况下,顶层树将是无效的。这取决于您决定如何处理重复数据。否则它们都是有效的。顺便说一句,关于算法的权威书籍是 CLRS 书籍,但我认为他们跳过了 2-3 棵树,称它们为 B 树的特例,所以帮助不大。
-
感谢您的帮助,我知道 CLRS,但现在对我来说太难了。现在在看《数据结构与算法》,把书上的每一个样例和习题都写了一遍,但是有的也很难,我花了很多时间,是不是学习的好方法?
-
是的,对树、图、堆、队列等基本数据结构和排序算法进行编码是一种很好的学习方式。 2-3 树对编码具有挑战性。祝你好运!
标签: data-structures tree b-tree