Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在2-3树中插入7_Algorithm_Binary Tree_Binary Search Tree - Fatal编程技术网

Algorithm 如何在2-3树中插入7

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”,它将形成一个新的根节点: 如果我们将中间违反状态可视化,则在插入过程中会得到: ┌───┬───┐

我正在尝试将元素7插入到这个2-3树中(见图):


由于包含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移动到左节点。这似乎是正确的,因为树将被平衡,但您要采取什么步骤才能达到这一点?你是怎么推理的?这不是一棵树吗?您可以轻松搜索插入/删除算法