Array Representation of Binary Search Tree and Traversals
π Rules for Array Representation (0-based Index)
If a node is stored at index i:
-
Root → index
0 -
Left child → index
2*i + 1 -
Right child → index
2*i + 2 -
Parent → index
(i - 1) / 2(integer division)
Example
Insert into BST: 50, 30, 70, 20, 40, 60, 80
The BST looks like:
Array representation (tree[]):
π C Program (0-based Index BST)
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int tree[MAX]; // array representation of BST
// Function to insert a node into BST
void insert(int data) {
int i = 0;
while (i < MAX && tree[i] != 0) {
if (data < tree[i])
i = 2 * i + 1; // move to left child
else if (data > tree[i])
i = 2 * i + 2; // move to right child
else {
printf("Duplicate value %d not allowed.\n", data);
return;
}
}
if (i < MAX)
tree[i] = data;
else
printf("Tree is full. Cannot insert %d.\n", data);
}
// In-order Traversal
void inorder(int i) {
if (i < MAX && tree[i] != 0) {
inorder(2 * i + 1);
printf("%d ", tree[i]);
inorder(2 * i + 2);
}
}
// Pre-order Traversal
void preorder(int i) {
if (i < MAX && tree[i] != 0) {
printf("%d ", tree[i]);
preorder(2 * i + 1);
preorder(2 * i + 2);
}
}
// Post-order Traversal
void postorder(int i) {
if (i < MAX && tree[i] != 0) {
postorder(2 * i + 1);
postorder(2 * i + 2);
printf("%d ", tree[i]);
}
}
int main() {
int choice, value;
// Initialize array
for (int i = 0; i < MAX; i++)
tree[i] = 0;
while (1) {
printf("\n--- Array Representation of BST (0-based index) ---\n");
printf("1. Insert\n");
printf("2. In-order Traversal\n");
printf("3. Pre-order Traversal\n");
printf("4. Post-order Traversal\n");
printf("5. Exit\n");
printf("Enter choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter value: ");
scanf("%d", &value);
insert(value);
break;
case 2:
printf("In-order Traversal: ");
inorder(0);
printf("\n");
break;
case 3:
printf("Pre-order Traversal: ");
preorder(0);
printf("\n");
break;
case 4:
printf("Post-order Traversal: ");
postorder(0);
printf("\n");
break;
case 5:
exit(0);
default:
printf("Invalid choice. Try again.\n");
}
}
return 0;
}
Comments
Post a Comment