【发布时间】:2012-08-03 23:32:19
【问题描述】:
在下面描述的2-3-4 tree 中(来自Data Structures & Algorithm in Java, 2nd ed),为什么插入99 会导致83/92/104 的节点分裂,而看起来99 可能已经插入到右子节点(@ 987654327@child,紧跟在97之后的位置,没有做任何拆分?
【问题讨论】:
标签: algorithm 2-3-4-tree
在下面描述的2-3-4 tree 中(来自Data Structures & Algorithm in Java, 2nd ed),为什么插入99 会导致83/92/104 的节点分裂,而看起来99 可能已经插入到右子节点(@ 987654327@child,紧跟在97之后的位置,没有做任何拆分?
【问题讨论】:
标签: algorithm 2-3-4-tree
将 99 插入 C 是可以的,因为它会保持所有不变量,但是如果插入总是在向下的过程中扩展 4 个节点,则算法通常更简单。然后总会有空间进行任何需要的提升和旋转。比较 C 本身已经是 4 节点的情况可能会有所帮助。
【讨论】:
C 已满(例如96/97/98)并且我们没有在向下的途中进行节点拆分,我们必须拆分C 以插入99。但是,在这种情况下拆分 C 会导致树变得不平衡,这违反了 2-3-4 树的隐含规则。
保持树平衡,保证性能。插入是递归的,它会命中一个 4 节点(具有 3 个值和 4 个子节点的节点),这将导致拆分完成。
【讨论】:
99 简单地插入C 而不拆分其父级,那么树如何不平衡?