我想从以下2-3-4树中删除15。我想过简单地移动17,但我不知道这是否正确,因为它必须完整。
2-3-4树在删除后会如何显示?我认为在这种情况下,简单地向上移动17是不正确的。但我不太确定。
答案 0 :(得分:1)
您拥有的树不是有效的2 3 4树,因为它有重复的6。
要从2 3 4树中删除内部值,您只需将要删除的值替换为其下一个最大项,其顺序为后继,即17。这样可以减少删除问题,删除值来自叶节点。所以问题是,如何删除叶节点值?
当您从2 3 4树的树叶中删除时,只需删除该项目(如果它是3节点或4节点)。如果它是一个2节点,则会使节点为空。这称为下溢。要解决此问题,必须将遇到的所有2个节点转换为3个或4个节点。您必须处理三种情况,具体取决于是否有相邻的兄弟节点是3节点还是4节点,或者它们是否都是2节点。这将在下面的链接中解释。
有关从2 3 4树中删除的讨论,请参见幻灯片51至53:
http://www.serc.iisc.ernet.in/~viren/Courses/2009/SE286/2-3Trees-Mod.ppt
2 3 4删除(和插入)也在下面解释和说明:
对于实现2 3 4树的源代码(在C ++ 11中),请参阅: