我们可以这样删除avl树节点吗

Posted

技术标签:

【中文标题】我们可以这样删除avl树节点吗【英文标题】:Can we delete avl tree node in this way 【发布时间】:2019-08-17 06:41:52 【问题描述】:

所以我在研究 AVL 树时发现从树中删除了一个特定节点。它是通过删除一个类似于 BST 的节点然后平衡高度差因子来完成的。但是如果我们有包含插入元素顺序的数组并且我们有一个要删除的节点。我删除了数组中该节点的出现,然后从头开始构造 AVL。这可以是删除的好方法吗?

【问题讨论】:

【参考方案1】:

当然可以这样删除。但讨论算法时真正的问题是它的复杂性是什么?

从 AVL 树中删除的标准算法的复杂度为 o(lg(n)) - 你可以在网上到处找到关于这个事实的解释。

现在让我们看看您的方法 - 使用中序遍历将 AVL 树转换为排序数组的复杂性需要 O(n)。比从排序数组构造 AVL 树要 O(n)。

因此,归根结底,这种方法效率较低。

【讨论】:

以上是关于我们可以这样删除avl树节点吗的主要内容,如果未能解决你的问题,请参考以下文章

AVL树

AVL树(平衡二叉查找树)

算法二叉搜索树之AVL树

AVL树

AVL树

AVL树