我正在学习的教科书(Lafore)首先介绍了红黑树,并没有包含任何伪代码,尽管所呈现的相关算法似乎相当复杂,有许多独特的情况。
接下来他介绍了2-3-4树,这对我来说更容易理解,我猜想,也更容易实现。他包括了一些很清晰的Java代码。他似乎暗示2-3-4更容易实现,根据我目前看到的,我会同意这一点。
然而,维基百科却说相反...我认为它可能是错误的:
作为一个附注……虽然我同意Lafore所说的大部分内容,但我认为有趣的是他将它们呈现的顺序与维基百科所说的常见顺序相反(RB之前是2-3-4)。我认为先学习2-3-4再学习RB更有意义,因为RB更难以概念化。也许他选择这个顺序是因为RB与他在前一章刚刚完成的BST更密切相关。
接下来他介绍了2-3-4树,这对我来说更容易理解,我猜想,也更容易实现。他包括了一些很清晰的Java代码。他似乎暗示2-3-4更容易实现,根据我目前看到的,我会同意这一点。
然而,维基百科却说相反...我认为它可能是错误的:
http://en.wikipedia.org/wiki/2-3-4_tree
2-3-4树是红黑树的等距结构,这意味着它们是等价的数据结构。换句话说,对于每个2-3-4树,都存在至少一个红黑树,其中数据元素的顺序相同。此外,在导致节点扩展、分裂和合并的2-3-4树上进行插入和删除操作等同于红黑树中的颜色翻转和旋转。通常先介绍2-3-4树,因为它们在概念上更简单。然而,由于涉及到树操作中的大量特殊情况,实现2-3-4树在大多数编程语言中可能会很困难。相比之下,红黑树更容易实现,因此被广泛使用。具体而言,“更多特殊情况”的部分对我来说似乎有些反向(我认为是RB具有更多的特殊情况,而不是2-3-4)。但是,我仍在学习中(并且还没有完全理解红黑树),所以我很想听听其他人的意见。作为一个附注……虽然我同意Lafore所说的大部分内容,但我认为有趣的是他将它们呈现的顺序与维基百科所说的常见顺序相反(RB之前是2-3-4)。我认为先学习2-3-4再学习RB更有意义,因为RB更难以概念化。也许他选择这个顺序是因为RB与他在前一章刚刚完成的BST更密切相关。