Algorithm 如何在2-3树中插入7
我正在尝试将元素7插入到这个2-3树中(见图):Algorithm 如何在2-3树中插入7,algorithm,binary-tree,binary-search-tree,Algorithm,Binary Tree,Binary Search Tree,我正在尝试将元素7插入到这个2-3树中(见图): 由于包含6和9的节点已满,我应该将7移动到6和9的父节点,但该节点也已满,那么我该怎么办?叶(6,9)已满,插入7时必须拆分。这意味着中间值(即7)必须插入父节点(本例中为根节点)。正如您正确注意到的,该节点(2,5)也已满。所以它也必须分裂。考虑7时,中间值为5,必须向上移动。由于没有“up”,它将形成一个新的根节点: 如果我们将中间违反状态可视化,则在插入过程中会得到: ┌───┬───┐
由于包含6和9的节点已满,我应该将7移动到6和9的父节点,但该节点也已满,那么我该怎么办?叶(6,9)已满,插入7时必须拆分。这意味着中间值(即7)必须插入父节点(本例中为根节点)。正如您正确注意到的,该节点(2,5)也已满。所以它也必须分裂。考虑7时,中间值为5,必须向上移动。由于没有“up”,它将形成一个新的根节点: 如果我们将中间违反状态可视化,则在插入过程中会得到:
┌───┬───┐
│ 2 │ 5 │
└───┴───┘
/ | \
┌─┬─┐ ┌─┬─┐ ┌─┬─┬─┐
│1│ │ │3│4│ │6│7│9│ (overflow)
└─┴─┘ └─┴─┘ └─┴─┴─┘
然后7向上移动:
┌───┬───┬───┐
│ 2 │ 5 │ 7 │ (overflow)
└───┴───┴───┘
/ | | \
┌─┬─┐ ┌─┬─┐ ┌─┬─┐ ┌─┬─┐
│1│ │ │3│4│ │6│ │ │9│ │
└─┴─┘ └─┴─┘ └─┴─┘ └─┴─┘
┌─┬─┐
│5│ │
└─┴─┘
/ \
┌─┬─┐ ┌─┬─┐
│2│ │ │7│ │
└─┴─┘ └─┴─┘
/ \ / \
┌─┬─┐ ┌─┬─┐ ┌─┬─┐ ┌─┬─┐
│1│ │ │3│4│ │6│ │ │9│ │
└─┴─┘ └─┴─┘ └─┴─┘ └─┴─┘
然后5向上移动:
┌───┬───┬───┐
│ 2 │ 5 │ 7 │ (overflow)
└───┴───┴───┘
/ | | \
┌─┬─┐ ┌─┬─┐ ┌─┬─┐ ┌─┬─┐
│1│ │ │3│4│ │6│ │ │9│ │
└─┴─┘ └─┴─┘ └─┴─┘ └─┴─┘
┌─┬─┐
│5│ │
└─┴─┘
/ \
┌─┬─┐ ┌─┬─┐
│2│ │ │7│ │
└─┴─┘ └─┴─┘
/ \ / \
┌─┬─┐ ┌─┬─┐ ┌─┬─┐ ┌─┬─┐
│1│ │ │3│4│ │6│ │ │9│ │
└─┴─┘ └─┴─┘ └─┴─┘ └─┴─┘
结束树不应该看起来像根目录的
(3,6)
,然后像子目录的(1,2)、(4,5)、(7,9)
?例如:将6移动到父节点,这是满的,将5移动到中间的子节点,将3移动到上,将2移动到左节点。这似乎是正确的,因为树将被平衡,但您要采取什么步骤才能达到这一点?你是怎么推理的?这不是一棵树吗?您可以轻松搜索插入/删除算法