我需要一些帮助来弄清楚如何合并两个二叉搜索树。我的想法/算法:
1)制作一个新的第三个二元搜索树,以保持其他两棵树的联合。
2)浏览第一棵树,将所有连续元素复制到新创建的树中。
3)完成与上面相同的第二棵树。
我有一个add函数,它负责重复并将东西放入树中,因此这部分不是问题。我的问题是我不知道如何遍历每个节点并单独操作它们。我正在考虑用这样的东西遍历树:
public void inOrderTraverseTree(Node focusNode) {
if (focusNode != null) {
preorderTraverseTree(focusNode.leftChild);
//this is where I can do an operation on the node
preorderTraverseTree(focusNode.rightChild);
我想把每个连续的节点都添加到我的第三个二叉树中。据我所知,这是不可能实现上述功能的任何变化。还有另一种方法可以解决这个问题吗?它需要一个完全不同的算法吗?
答案 0 :(得分:1)
可以合并两个二叉搜索树B1和B2,而无需使用任何新的数据结构/内存。 我们可以做1个树的后序遍历,比如B1,逐个删除它们的节点并将它们插入到另一个树B2中。
通过这种方法,B2将包含原始B1和B2的所有节点,B1将在同一过程中被解除分配。