【发布时间】:2011-12-18 05:55:53
【问题描述】:
当已知元素总是按顺序插入时,我想知道是否有合适的算法来保持二叉树的平衡。
对此的一种选择是使用从排序数组或链表创建平衡树的标准方法,如this 问题和this 其他问题中所述。但是,我想要一种方法,可以将一些元素插入树中,然后对其执行查找,然后再添加其他元素,而无需将树分解为列表并重新制作整个事物。
另一种选择是使用许多自平衡树实现中的一种,AVL、AA、Red-Black 等。但是,所有这些都会在插入过程中产生某种开销,而我是考虑到元素总是以递增顺序插入的约束,想知道是否有办法避免这种情况。
所以,为了清楚起见,我想知道是否有一种方法可以保持平衡的二叉树,这样我就可以在任意点插入任意新元素并保持树的平衡,提供新元素在树的排序中大于树中已经存在的所有元素。
例如,假设我有以下树:
4
/ \
/ \
2 6
/ \ / \
1 3 5 7
如果我知道元素会大于7,有没有一种简单的方法可以在插入新元素时保持平衡?
【问题讨论】:
-
是作业吗?理论问题?如果是为了实际使用,我会在这些条件下使用skip list 而不是 BST,并且添加始终是最后一个元素。如果这有帮助,虽然它不是一棵树,但请告诉我,我会写下它作为答案。
-
@amit,这也是我的第一个猜测。
-
@amit,这不是一个家庭作业问题,主要是出于好奇/理论。因此,尽管您认为其他数据结构(例如跳过列表(甚至可能指树)可能非常适合)是对的,但我对 BST 执行此操作的方式更感兴趣。
标签: algorithm tree binary-tree