Algorithm 如何消除二叉搜索树的广度优先排序中的差距?

Algorithm 如何消除二叉搜索树的广度优先排序中的差距?,algorithm,data-structures,tree,binary-tree,binary-search-tree,Algorithm,Data Structures,Tree,Binary Tree,Binary Search Tree,无间隙二叉搜索树是一种具有无间隙特性的自平衡二叉搜索树。“无间隙”属性表示树的宽度优先顺序中没有间隙。宽度优先排序中的间隙最好通过图表来定义。在下图中,红色虚线圆圈突出显示的区域被视为宽度优先顺序中的间隙: 如果重新构造此树以消除间隙,它将如下所示: 如果将数字7添加到此重构树中而不重新平衡,则它将如下所示: 同样,在消除间隙后: 在插入和删除任意大小的树之后,是否有一个log(n)算法来确保gap-less属性 在插入和删除任意大小的树之后,是否有一个log(n)算法来确保gap-le

无间隙二叉搜索树是一种具有无间隙特性的自平衡二叉搜索树。“无间隙”属性表示树的宽度优先顺序中没有间隙。宽度优先排序中的间隙最好通过图表来定义。在下图中,红色虚线圆圈突出显示的区域被视为宽度优先顺序中的间隙:

如果重新构造此树以消除间隙,它将如下所示:

如果将数字7添加到此重构树中而不重新平衡,则它将如下所示:

同样,在消除间隙后:

在插入和删除任意大小的树之后,是否有一个log(n)算法来确保gap-less属性

在插入和删除任意大小的树之后,是否有一个log(n)算法来确保gap-less属性

没有

看为什么,考虑这棵树(它具有较小的属性):

要插入8,您需要以以下内容结束:

           5
          / \
         3   7
        /|   |\
       2 4   6 8
      /
     1
           5
          / \
         3   7
        /|   |
       2 4   6
这显然需要至少访问每个节点一次,因为每个节点之后都有一个不同的父节点。因此,您不可能保证比O(n)时间更好

同样,要删除1,您需要完成以下操作:

           5
          / \
         3   7
        /|   |\
       2 4   6 8
      /
     1
           5
          / \
         3   7
        /|   |
       2 4   6
同样的问题

在插入和删除任意大小的树之后,是否有一个log(n)算法来确保gap-less属性

没有

看为什么,考虑这棵树(它具有较小的属性):

要插入8,您需要以以下内容结束:

           5
          / \
         3   7
        /|   |\
       2 4   6 8
      /
     1
           5
          / \
         3   7
        /|   |
       2 4   6
这显然需要至少访问每个节点一次,因为每个节点之后都有一个不同的父节点。因此,您不可能保证比O(n)时间更好

同样,要删除1,您需要完成以下操作:

           5
          / \
         3   7
        /|   |\
       2 4   6 8
      /
     1
           5
          / \
         3   7
        /|   |
       2 4   6

这也是同样的问题。

第二张图片中的重构有问题
2
4
的正确子项,尽管它比
4
小,但在第二幅图像中,重构有问题
2
4
的右子级,尽管它比
4