【发布时间】:2011-11-24 07:53:12
【问题描述】:
如何合并 2 个二叉搜索树,以使生成的树包含两棵树的所有元素并保持 BST 属性。
我看到了提供的解决方案 How to merge two BST's efficiently?
但是,该解决方案涉及转换为双链表。我想知道是否有一种更优雅的方法可以在没有转换的情况下就地完成。我想出了以下伪代码。它适用于所有情况吗?我也遇到了第三种情况。
node* merge(node* head1, node* head2) {
if (!head1)
return head2;
if (!head2)
return head1;
// Case 1.
if (head1->info > head2->info) {
node* temp = head2->right;
head2->right = NULL;
head1->left = merge(head1->left, head2);
head1 = merge(head1, temp);
return head1;
} else if (head1->info < head2->info) { // Case 2
// Similar to case 1.
} else { // Case 3
// ...
}
}
【问题讨论】:
-
树不像LinkedLists那么简单,所以必须遍历它们以检索每个项目,存储在更“线性”的数据结构中,然后添加到另一棵树中进行合并。跨度>
-
优雅是相当主观的......我发现扁平化和重建方法非常优雅! :)
-
BST 是否提供自平衡功能?
标签: algorithm binary-tree