【问题标题】:Merge 2 AVL trees with corrupted nodes in one of them合并 2 个 AVL 树,其中一个中有损坏的节点
【发布时间】:2021-11-14 17:38:47
【问题描述】:

假设我们有 2 个 AVL 树(使用方法 insert(key)delete(key)),但其中一个存在损坏的节点(损坏的节点数量远少于总数该树中的节点数)。

我们希望将 2 个 AVL 树合并为 1 个单独的 AVL 树,以便删除损坏的节点(我们有损坏节点的键列表)。

“朴素”算法是(假设树 1 包含损坏的节点):对于每个损坏的节点,将其从树 1 中删除。然后将树 1 中的所有剩余节点插入树 2,所以最终的 AVL 树就是我们想要的“合并”树。

现在的问题是提出一种更有效的方法来合并 2 棵树,比上面的 朴素算法 更好。

有人知道吗?感谢您的帮助!

【问题讨论】:

  • “naive”算法不是有O(NlogN)复杂度吗?

标签: python database algorithm avl-tree lookup-tables


【解决方案1】:

二叉搜索树可以在线性时间 O(N) 内按升序列出其节点。您可以组织一个合并过程,同时枚举两棵树的节点,按全局顺序获取节点(并删除损坏的节点)。

如果将排序后的元素存储在数组中,则可以在线性时间内转换为新的平衡 BST。您只需设置所有平衡因素即可使其成为 AVL。

我怀疑是否可以在不首先合并到中间数组的情况下构造新树。 (只需要一个指针数组即可。)

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多