【问题标题】:Perfect Balanced Binary Search Tree完美平衡二叉搜索树
【发布时间】:2012-12-10 20:39:17
【问题描述】:

我有一个关于Balanced BST 的理论问题。

我想从常规的unbalanced BST 构建具有2^k - 1 节点的Perfect Balanced Tree。我能想到的最简单的解决方案是使用已排序的Array/Linked list 并递归地将数组划分为子数组,并从中构建Perfect Balanced BST

但是,在 Tree 大小非常大的情况下,我需要创建一个相同大小的 Array/List,因此这种方法会消耗大量内存。

另一种选择是使用AVL 旋转函数,逐个元素插入并根据树平衡因子(左右子树的三个高度)通过旋转平衡树。

我的问题是,我的假设是否正确?有没有其他方法可以从不平衡的BST 创建一个完美的BST

【问题讨论】:

  • 如果你有一棵大树并且想要在不改变大部分现有结构的情况下转换树,一些旋转函数非常有意义。 - 结果真的必须完美平衡吗?提问的背景是什么?
  • 是的,它必须完美平衡。这是一个学术项目的一部分。 “一些旋转功能”是什么意思?据我所知,有四个非常容易实现的旋转函数。
  • 不同种类的树使用略有不同的旋转方式。例如比较 AVL 和红黑树。

标签: c algorithm linked-list binary-search-tree avl-tree


【解决方案1】:

AVL 和类似的树不是完美平衡的,所以我不确定它们在这种情况下如何有用。

您可以使用leftright 指针代替forwardbackward 指针,从树节点构建双向链表。对该列表进行排序,并从下往上递归地构建树,从左到右使用该列表。

构建大小为 1 的树很简单:只需咬掉列表中最左边的节点即可。

现在如果你可以构建大小为N 的树,你也可以构建大小为2N+1 的树:构建大小为N 的树,然后咬掉一个节点,然后构建另一个大小的树N。单个节点将是大树的根,两个较小的树将是它的左右子树。由于列表已排序,因此该树自动成为有效的搜索树。

这对于2^k-1 以外的大小也很容易修改。

更新:由于您是从搜索树开始的,因此您可以直接在O(N) 时间和O(log N) 空间中构建一个排序列表(也许甚至在O(1) 空间中稍加巧思),然后构建树自下而上也在O(N) 时间和O(log N)(或O(1))空间中。

【讨论】:

    【解决方案2】:

    我还没有找到一个非常好的需要完美平衡的搜索树的情况。如果您的情况确实需要它,我想听听。通常,拥有几乎平衡的树会更好更快。

    如果您有一个大型搜索树,丢弃所有现有结构通常不是一个好主意。使用旋转函数是获得更平衡的树同时保留大部分现有结构的好方法。但是通常您使用合适的数据结构来确保您永远不会拥有完全不平衡的树。所谓的自平衡树。

    例如 AVL 树、红黑树或 splay-tree,它们使用稍微不同的旋转变体来保持树的平衡。

    如果你真的有一棵完全不平衡的树,你可能会遇到不同的问题。 - 在您的情况下,旋转它 AVL 方式可能是修复它的最佳方式。

    【讨论】:

      【解决方案3】:

      如果您的内存受限,那么您可以使用可以在 O(log n) 时间内在 AVL 树上完成的拆分和连接操作,并且我相信是恒定空间。

      如果您还能够维护订单统计信息,那么您可以按中位数拆分,使 LHS 和 RHS 完美,然后加入。

      伪代码(用于递归版本)将是

      void MakePerfect (AVLTree tree) {
      
          Tree left, right;
          Data median;
      
          SplitOnMedian(tree, &left, &median, &right);
          left = MakePerfect(left);
          right = MakePerfect(right);
          return Join(left, median, right);
      }
      

      我相信这可以在 O(n) 时间和 O(log n) 空间内实现。

      【讨论】:

        猜你喜欢
        • 2015-07-24
        • 1970-01-01
        • 2013-12-18
        • 1970-01-01
        • 2012-12-16
        • 1970-01-01
        • 2012-05-13
        相关资源
        最近更新 更多