【问题标题】:Union of Two Binary Search Trees [duplicate]两个二叉搜索树的并集[重复]
【发布时间】:2015-05-25 18:03:33
【问题描述】:

我需要一些帮助来弄清楚如何合并两个二叉搜索树。我的想法/算法:

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);

我想获取每个连续的节点并将其添加到我的第三棵二叉树中。据我所知,使用上述函数的任何变体都无法实现。还有其他方法可以解决这个问题吗?它需要完全不同的算法吗?

【问题讨论】:

  • 原始 BST 是否平衡?结果应该是?

标签: java algorithm binary-tree


【解决方案1】:

可以合并两个二叉搜索树 B1 和 B2,而无需使用任何新的数据结构/内存。 我们可以对一棵树进行后序遍历,比如 B1,将其节点一个接一个地删除,然后将它们插入到另一棵树 B2 中。

通过这种方法,B2 将包含原始 B1 和 B2 的所有节点,并且 B1 将在同一进程中被释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2015-08-14
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多