【问题标题】:Insertion in Threaded Binary leads leads to O(n) time complexity?线程二进制中的插入导致 O(n) 时间复杂度?
【发布时间】:2023-04-07 09:26:01
【问题描述】:

线程二叉树是有效的,因为它不需要任何递归或堆栈来遍历。我怀疑它使每次插入都需要 O(n) (其中 n 是树中的节点数),因为对于我们插入的每个节点,它都必须再次线程化,不是吗?如果我是对的,那么线程二叉树实际上是无效的,不是吗?

【问题讨论】:

  • 没有。您仍然可以递归地遍历树以找到插入点。所以插入仍然是 O(log n),假设你的树保持平衡。
  • 附带说明,许多库在提供并发性时会避免使用树。最明显的例子是java的ConcurrentSkipListSet

标签: data-structures binary-tree time-complexity binary-search-tree inorder


【解决方案1】:

正如Wikipedia article 所说:

"二叉树是通过创建所有正确的子指针来线程化的 通常是指向节点的中序后继的空点(如果 它存在),以及所有通常为空的左子指针 指向节点的前序节点。”

这里的关键是“那通常是空的。”

通常,您可以为线程链接添加其他字段,或者使用位标志来确定左右节点是子节点还是顺序后继/前继。

由于内部节点指针仍然是传统的左/右二叉树节点引用,您可以使用标准递归搜索在 O(log n) 时间内找到插入点。

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多