删除二叉树中的节点的时间复杂度是多少?

时间:2011-01-03 05:31:57

标签: data-structures binary-tree big-o time-complexity

要删除二叉树中的节点,我们必须搜索节点。这在最小O(log N)和max O(N)中是可能的。根据节点,我们必须重新排列指针。我们如何计算时间复杂度。

4 个答案:

答案 0 :(得分:14)

这取决于你是如何删除的。最常见的方法是找到节点的后继者,然后用该后继者替换节点。这可以在O(h)中完成,其中h是树的高度。在最坏的情况下,这是O(n),但在平衡树中是最坏情况的O(lg n)。

答案 1 :(得分:3)

是最佳案例复杂性为O(logn)(完全平衡时)和最坏情况复杂度为O(n)
1 - 2 - 3 - 4

主要问题 BST删除(Hibbard Deletion)是它不对称。经过多次插入和删除后,BST变得不太平衡。研究人员证明,经过足够长时间的随机插入和删除树的高度变为 sqrt(n)。所以现在每个操作(搜索,插入,删除)将采用 sqrt(n)时间,这与 O(logn)相比并不好。

对于BST的有效对称删除,这是一个非常长期(大约50年)的开放问题。为了保证平衡树,我们必须使用RedBlack Tree等。

答案 2 :(得分:2)

你在哪里得到“最差搜索时间为最大O(N)”?这应该永远不会发生在BST中。在最坏的情况下,它应该是搜索和删除的最大值O(h),其中“h”是树的高度。请参阅此helpful article

答案 3 :(得分:0)

大部分复杂性都是搜索节点。一旦找到它 - 只要保留父节点 - 删除节点只需要几个分配。所以这是一个不变的秩序。