【问题标题】:Binary Search Tree deletion procedure with children带子项的二叉搜索树删除过程
【发布时间】:2016-03-09 11:52:40
【问题描述】:

不知道如何措辞这个问题。基本上采取以下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

【问题讨论】:

    标签: data-structures tree binary-tree binary-search-tree


    【解决方案1】:

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

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

    【讨论】:

    • 这样更有意义,也更容易实现,谢谢!
    • 这个逻辑是否有意义: 1. 检索左子树中的最大值(最初是左子树的根),以及最大值父节点(最初是当前子树的根) 2.如果最终父节点与原始节点不同,则将该父节点的右子树设置为原始节点左子树中最大值节点的左子树。 3.将原节点左子树中最大值的节点的值和频率/出现次数复制到原节点。
    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多