完整的二叉搜索树插入

时间:2012-10-18 10:40:51

标签: language-agnostic binary-tree

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

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

我发现完整二进制搜索树是这些操作的良好结构。我已经轻松实现了遍历和查找(它们非常通用)但是我很难插入。我似乎无法插入任意元素并重新平衡树而不会丢失shape属性(完整树)或分区属性(节点左侧的所有元素都严格地比节点小)。

我也找不到任何其他在线内容,我发现的唯一引用是关于一般二叉树(没有形状属性),并且在我的情况下不适用。完整的树木由于某种原因不受欢迎。

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

1 个答案:

答案 0 :(得分:2)

由于您希望在O(log n)中进行查找并在O(log n)中的任意位置插入,因此您需要一个自平衡搜索树。无法有效更新完整的二叉树 - 它们被视为静态数据结构,它们是为只读方案而制作的。