Data structures 带子级的二叉搜索树删除程序

Data structures 带子级的二叉搜索树删除程序,data-structures,tree,binary-tree,binary-search-tree,Data Structures,Tree,Binary Tree,Binary Search Tree,我不知道这个问题怎么说。基本上采取以下BST: 25 / \ 20 30 / \ / \ 18 23 27 31 / \ /\ 8 19 22 24 如果我要删除值25并在其位置旋转值20,那么将23子树附加到27或将30子树附加到24是否更有意义。我的意思不是针对这个案子,而是从更广泛的角度来看 需要明确的是,在这两种安排之间,什么是更可取的: 20 / \ 18 23

我不知道这个问题怎么说。基本上采取以下BST:

       25
     /    \
   20      30
  /  \      / \
 18   23  27   31
/  \   /\
8  19 22 24
如果我要删除值25并在其位置旋转值20,那么将23子树附加到27或将30子树附加到24是否更有意义。我的意思不是针对这个案子,而是从更广泛的角度来看

需要明确的是,在这两种安排之间,什么是更可取的:

      20
    /    \
  18      23
 /  \      / \
8   19    22  24
                \
                 30
                /  \
              27   31

      20
    /    \
  18      30
 /  \     / \
8   19  27  31
        /
       23
      /  \
     22  24

轮换20人不是最明智的决定。您应该将其替换为左子树的最大值或右子树的最小值


如果您确实希望按现有方式旋转,则树的高度之间没有差异,并且两者在时间复杂度方面是相同的

这样做更有意义,而且更易于实现,谢谢!这个逻辑有意义吗:1。检索左子树中的最大值(最初是左子树的根),以及最大值父节点(最初是当前子树的根)2。如果最终父节点与原始节点不同,请将该父节点的右子树设置为该节点的左子树,并在原始节点的左子树中设置最大值。3.使用原始节点左子树中的最大值将节点的值和频率/出现次数复制到原始节点。