合并两棵平衡二叉搜索树在本教程中,我们将学习如何合并两个平衡的二叉搜索树。 假设给出了两个平衡的二叉搜索树,例如AVL或红黑树。创建一个函数,将两个平衡的bst组合到平衡的二叉搜索树中。假设第一棵树有m个元素,第二棵有n个元素。归并函数必须是O(m+n)时间。 树的大小被假定为下列解的输入。如果没有通过遍历树来指定大小,则可以确定大小。 方法一(将第一个树元素插入到第二个树中):将第一个BST的所有元素逐个插入到第二个BST中。尝试将一个元素插入到一个自平衡BST中需要Logn时间(参见此),其中n是BST的大小。因此,该过程的时间复杂度为Log(n) + Log(n+1)…日志(m + n - 1)。这个表达式的值在mLogn和mLog(m+n-1)之间变化。作为优化,我们可以选择较小的树作为第一个树。 方法2(合并按顺序遍历):
该方法的时间复杂度为O(m+n),优于方法1。即使输入bst不平衡,这个过程也需要O(m+n)时间。 该方法的实现如下所示。 c++程序: 输出: 下面是合并树的顺序遍历10 30 60 90 100 110 130 400 C程序: 输出: 下面是合并树10 30 60 90 100 110 130 400的inorder1遍历 方法三(基于dll的就地合并):
该方法的时间复杂度也是O(m+n),并且是就地转换。 c++程序: 输出: 合并后的数据按照10 30 60 90 100 110 130 400的顺序进行树状遍历 的时间复杂度是O(N + M),其中N和M是给定树中的节点数 辅助空间: O(1),因为总有多余的空间。
下一个话题
带有示例的引导中的响应式图像
|