合并两个二叉搜索树

时间:2013-01-17 23:09:10

标签: c++ data-structures merge binary-search-tree

  

可能重复:
  How i can merge two binary trees

我是树木代码的新手,我被要求编写一个代码,用于通过编写函数来合并两个二叉搜索树

void mergeBst (BST & othertree)

此函数将接收另一个Bst并将该树中的所有非冗余值插入当前树,所以请您告诉我该怎么做?

3 个答案:

答案 0 :(得分:3)

使用两棵树创建两个排序列表。这将是O(m + n)。然后合并两个排序列表维护顺序。(O(m + n))使用合并列表创建组合树。(O(m + n))

或者简单地说 对于输入树中的每个节点,找到将节点插入源树的位置。然后插入它。

How i can merge two binary trees

How to merge two BST's efficiently?

答案 1 :(得分:1)

将树B合并到树A(A.mergeBst(B))中:

将B的根与A的根比较。
如果B的根更大,则将B.left合并到A中,将其余部分合并到A.right
如果它更少,则将B.right合并到A中,将其余部分合并到A.left中 如果它们相等,请将B.left合并到A.left,将B.right合并到A.right,然后丢弃B的根。

答案 2 :(得分:0)

考虑两个二进制搜索树:

  1. 来源 - 您要迭代的BST
  2. 目标 - 您希望添加来源值的BST
  3. 有一个非常简单的算法。

    对于来源搜索中的每个“值”,如果它们在目标中,如果它们是,则丢弃它们,如果不插入它们。

    编辑: 通过“迭代”我的意思是:http://en.wikipedia.org/wiki/Tree_traversal

    预购迭代:

    1. 访问root。
    2. 遍历左子树。
    3. 遍历正确的子树。