It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center
                            
                        
                    
                
                                6年前关闭。
            
                    
有人可以用C程序帮助我将一棵二进制树复制到另一棵二进制树吗?

我对算法或C函数都没问题,所以我可以实现它们。

谢谢 :)

最佳答案

如果要添加的树是适当的子集(没有重叠),并且不必平衡树,则只需将其根节点附加到正确的插入点即可。我的意思是这样的:

  10
 /  \
1    70
 *
  5
 / \
2   7


您可以在1的右侧创建一个链接以附加到5。这将起作用,因为整个子树插槽都位于110之间(这就是我所说的“无重叠”)。

实际上,如果甚至没有对树进行排序,也可以将根节点附加到所需的任何叶上:

  40
 /  \
1    10
       *
        5
       / \
      8   789


在那种情况下,重叠是没有问题的,因为树没有排序,所以假设您不关心顺序是一个安全的选择。

但是,如果您有一棵平衡的树,那么最好的选择是遍历其中一棵树,并使用insert方法将找到的每个值添加到另一棵树上。

这样既可以正确组合“重叠”树,又可以在必要时使目标树保持平衡。因此,使用上面的第一个示例,您将获得类似以下内容的信息:

     7
    / \
   /   \
  2     10
 / \      \
1   5      70


然后,“算法”变为:

def copyTree (source, destination):
    item = source.first()
    while item != none_left:
        destination.insert (item.value)
        item = source.next (item)


这样,您不必担心附件是否会出现问题,因为目标树的insert方法将自动执行正确的操作(排序,平衡等)。

关于c - C程序将一棵二叉树复制到另一棵二叉树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16767055/

10-11 16:41