2011-08-22 95 views
7

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

+6

合并二叉树非常简单,只需将一个二叉树的根链接为另一个叶子节点的子节点。你是否有其他想要保存的结构,例如被命令或平衡? – JGWeissman

+0

让我们从简单的无序不平衡树开始。你说这是微不足道的,所以你可以告诉我它是如何完成的。? –

回答

22

1)将两个树平铺到排序列表中。
2)合并列表你在1 GOT)
3)构造树出了什么你2了)

+0

有没有复杂性? –

+2

您可以使用标准的有序步行将树木平铺到O(n)时间的列表中。合并两个排序列表也可以在O(n)时间完成。一旦你合并了列表,你可以在O(n)时间内构建BST,方法是递归构造左右两半的树,然后将它们粘合在一起。因此整体的复杂性是O(n)。 – templatetypedef

+0

@templatetypedef:谢谢你的回答。是的,复杂性是O(n)。 – hari

5

This算法可以帮助你。

+0

与树木无关。 – SLaks

+1

@SLaks是的。既然我们知道他们是BST,我们可以将这些树排列成一个排序列表。一旦我们有了2个排序列表,这个算法就适用了。 –

0

效率讨论创建一个新的节点,并在其中一棵树的头指向一个尾巴,在其他树的头点其它的尾巴。也许你需要澄清你的问题是更具体。你想保留什么样的关系?

0

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

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

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