假设我有两个AVL树,并且第一个树中的每个元素都比第二个树中的任何元素都小。最有效的方法是将它们连接成一个单独的AVL树,但我已经搜索了所有地方,都没有找到有用的信息。
用值n和子树left和r替换该节点。O(1)
通过构造,新节点是AVL平衡的,其子树比r高1。
相应地增加其父项的平衡。O(1)
h
或h+1
,其中h
是左子树的高度。 - rareyesdev一种非常简单的解决方案(无需假定树之间的关系)如下:
这两个步骤都是O(n)级别的。它的主要问题在于需要额外的O(n)空间。
在算法的第三步向左导航,直到到达其子树与左侧树具有相同高度的节点。这并非总是可能的(请参见反例图像)。完成此步骤的正确方法是查找高度为h
或h+1
的子树,其中h
是左子树的高度。
我猜你只能遍历其中一棵树(希望是较小的那棵),并逐个将其元素添加到另一棵树中。AVL插入/删除操作不适用于一次添加整个子树。