【问题标题】:How i can merge two binary trees我如何合并两个二叉树
【发布时间】:2011-08-22 19:22:48
【问题描述】:

我有两棵二叉树,我想合并它们。 我的第一个问题是,我们是否可以合并两个二叉树,如果可以,我执行合并操作的效率如何,以及执行合并操作的各种方式是什么。 ..?

【问题讨论】:

  • 合并二叉树是微不足道的,只需将一棵树的根链接为另一个叶子节点之一的子节点。您是否有其他想要保留的结构,例如有序或平衡?
  • 让我们从简单的无序不平衡树开始。你说这很简单,你能告诉我它是怎么做的吗?

标签: algorithm data-structures merge tree


【解决方案1】:

1) 将两棵树展平为排序列表。
2) 合并您在 1) 中获得的列表
3) 根据你在 2) 中得到的内容构建树

【讨论】:

  • 您可以使用标准的有序遍历在 O(n) 时间内将树展平为列表。合并两个排序列表也可以在 O(n) 时间内完成。合并列表后,您可以在 O(n) 时间内通过递归构造左右两半的树,然后将它们粘合在一起来构造 BST。因此总体复杂度为 O(n)。
  • @templatetypedef:感谢您的回答。是的,复杂度是 O(n)。
  • @saurabh ranu:我不这么认为。
  • log(n) 时间复杂度 - 不可能
【解决方案2】:

This 算法可能会对您有所帮助。

【讨论】:

  • 这与树木无关。
  • @SLaks 是的。由于我们知道它们是 BST,我们可以将这些树排列成一个排序列表。一旦我们有了 2 个排序列表,这个算法就适用了。
【解决方案3】:

不考虑效率,这个答案可能会起作用Algorithm of combining two binary trees?。如果排序或平衡,在How to merge two BST's efficiently?Concatenating/Merging/Joining two AVL trees讨论效率

【讨论】:

    【解决方案4】:

    创建一个新节点,将一条尾巴指向其中一棵树的头部,另一条尾巴指向另一棵树的头部。也许您需要澄清您的问题以更具体。你想维护什么样的关系?

    【讨论】:

      【解决方案5】:

      一棵树也是一个图,所以输出每棵树的边顶点对(u,v),然后将这些边集合合并,输出结果图。

      问题在于如何将一棵树中的顶点映射到另一棵树中的顶点(例如,我们在树 1 中有边对 (5,9),在树 2 中有边对 (5,6),这 5 是否对应到同一个顶点?)。

      想出一个顶点的编号(也许将数字分配给不完整二叉树中的每个顶点,就好像它是一棵完全二叉树一样,换句话说,将任何部分二叉树中的顶点分配给假设的槽该树是其子树的完整二叉树),以某种方式提供理想的等效性是可行的。

      【讨论】:

        猜你喜欢
        • 2019-11-13
        • 1970-01-01
        • 2020-01-18
        • 2011-11-24
        • 2021-09-08
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 2015-05-25
        相关资源
        最近更新 更多