2

我有一个应用程序需要具有以下特征的数据结构:

  • O(n) 中的中序遍历
  • 在 O(log n) 中查找
  • 在 O(log n) 中插入空间 O(log n) 或更小
  • 高效的就地存储(= 树可以在没有孔的连续数组中就地修改)
  • 迭代,如果可能的话
  • 不需要删除

我发现完整的二叉搜索树对于这些操作来说是一个很好的结构。我已经很容易地实现了遍历和查找(它们非常通用),但是插入非常困难。我似乎无法插入任意元素并重新平衡树而不会丢失形状属性(完整树)或分区属性(节点左侧的所有元素都严格小于节点)。

我在网上也找不到其他任何东西,我找到的唯一参考资料是关于一般二叉树(没有形状属性)的,不适用于我的情况。出于某种原因,完整的树不受欢迎。

有没有人为完整的二叉树实现了插入,并且可以给我一些关于如何稳健有效地实现它的指示?这不是家庭作业,我需要它来完成一个真正的项目。

4

1 回答 1

2

由于您希望在 O(log n) 中查找并在 O(log n) 中的任意位置插入,因此您需要一个自平衡搜索树。完整的二叉树不能有效地更新——它们被认为是为只读场景制作的静态数据结构。

于 2012-10-18T10:43:47.433 回答