【发布时间】: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