我是树木代码的新手,我被要求编写一个代码,用于通过编写函数来合并两个二叉搜索树
void mergeBst (BST & othertree)
此函数将接收另一个Bst并将该树中的所有非冗余值插入当前树,所以请您告诉我该怎么做?
答案 0 :(得分:3)
使用两棵树创建两个排序列表。这将是O(m + n)。然后合并两个排序列表维护顺序。(O(m + n))使用合并列表创建组合树。(O(m + n))
或者简单地说 对于输入树中的每个节点,找到将节点插入源树的位置。然后插入它。
答案 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)
考虑两个二进制搜索树:
有一个非常简单的算法。
对于来源搜索中的每个“值”,如果它们在目标中,如果它们是,则丢弃它们,如果不插入它们。
编辑: 通过“迭代”我的意思是:http://en.wikipedia.org/wiki/Tree_traversal
预购迭代: