【发布时间】:2011-08-07 06:54:19
【问题描述】:
作为我正在处理的 AVL 模板的一部分(C++ 模板),当 n1+n2 是两棵树中的总元素时,我试图以 O(n1+n2) 复杂度合并 2 棵 AVL 树。
我想到了下一个算法。
- 中序遍历第一棵树并构建一个数组/列表 - O(n1)
- 中序遍历第二棵树并构建一个数组/列表 - O(n2)
- 合并这 2 个数组的排序并构建最终排序的数组/列表,大小为 n1+n2 - O(n1+n2)
- 用 n1+n2 个顶点构建一个几乎完整的空二叉树 - O(n1+n2)。
- 在使用合并数组/列表中的元素更新顶点时,在几乎完整的二叉树上进行中序遍历。
我的问题是我如何实际构建具有 n1+n2 个顶点的几乎完整的空二叉树?
【问题讨论】:
-
请注意,如果您的树支持像 standard binary tree container 中的迭代器,您实际上可以直接执行第 3 步,而无需在中间存储中复制两棵树的节点。
标签: c++ data-structures merge binary-tree avl-tree