liv*_*cmg 28 c c++ algorithm avl-tree data-structures
假设我有两个AVL树,并且第一个树中的每个元素都小于第二个树中的任何元素.将它们连接成一个单独的AVL树的最有效方法是什么?我到处搜索但没找到任何有用的东西.
mer*_*ike 31
假设您可能会破坏输入树:
因此,整个操作可以在O(log n)中执行.
编辑:第二个想法,在下面的算法中更容易推理旋转.它也可能更快:
left树中移除最右边的元素(如果需要,旋转并调整其计算高度).让我们n成为那个元素.O(log n)left.让我们r成为那个节点.O(log n)用值为n的新节点替换该节点,并使用子树left和r.O(1)
通过构造,新节点是AVL平衡的,其子树1高于r.
相应地增加其父母的余额.O(1)
一个超简单的解决方案(在树之间的关系中没有任何假设的情况下工作)是这样的:
两个步骤都是O(n).它的主要问题是需要额外的O(n)空间.
| 归档时间: |
|
| 查看次数: |
12656 次 |
| 最近记录: |