Welcome to our deep dive into the exciting world of Merging Two Binary Search Trees (BSTs)! In this tutorial, we'll learn:
Let's get started!
A Binary Search Tree (BST) is a type of data structure that organizes data in a hierarchical tree-like structure. It's a versatile data structure used in various applications due to its efficient search, insert, and delete operations.
š” Pro Tip: BSTs can be implemented using various programming languages, including Python, Java, and C++.
Merging two BSTs is a useful operation when dealing with multiple trees in a real-world application. For example, during a database merge, merging BSTs can help efficiently combine data from multiple sources.
The process of merging two BSTs involves traversing both trees simultaneously and combining their nodes to form a single BST.
Let's take two simple BSTs:
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
# BST 1
root1 = Node(50)
root1.left = Node(30)
root1.right = Node(70)
root1.left.left = Node(20)
root1.left.right = Node(40)
root1.right.right = Node(80)
# BST 2
root2 = Node(25)
root2.left = Node(10)
root2.right = Node(65)
root2.left.left = Node(5)
root2.left.right = Node(22)
root2.right.left = Node(75)Now, let's merge these two BSTs:
def merge(root1, root2):
if not root1:
return root2
if not root2:
return root1
if root1.val < root2.val:
root1.right = merge(root1.right, root2)
root1 = merge(root1, root2.left)
else:
root2.left = merge(root1, root2.left)
root2 = merge(root2.right, root1)
return root1 if root1 else root2
# Merged BST
merged_root = merge(root1, root2)Here's an example of merging two BSTs in Java:
class Node {
int key;
Node left, right;
Node(int item) {
key = item;
left = right = null;
}
}
// BST 1
Node root1 = new Node(50);
root1.left = new Node(30);
root1.right = new Node(70);
root1.left.left = new Node(20);
root1.left.right = new Node(40);
root1.right.right = new Node(80);
// BST 2
Node root2 = new Node(25);
root2.left = new Node(10);
root2.right = new Node(65);
root2.left.left = new Node(5);
root2.left.right = new Node(22);
root2.right.left = new Node(75);
// Merge BSTs
Node merged_root = merge(root1, root2);The merge() method in Java is implemented similar to the Python example:
Node merge(Node root1, Node root2) {
if (root1 == null)
return root2;
if (root2 == null)
return root1;
if (root1.key < root2.key) {
root1.right = merge(root1.right, root2);
root1.left = merge(root1.left, root2.left);
return root1;
} else {
root2.left = merge(root1, root2.left);
root2.right = merge(root1.right, root2.right);
return root2;
}
}What is the key characteristic of a Binary Search Tree (BST)?
Now that you've learned about merging two BSTs, go ahead and practice on your own with different BSTs to consolidate your understanding! Happy coding! š