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:

50 / \ 30 70 / \ / \ 20 40 60 80

Array representation (tree[]):

Index: 0 1 2 3 4 5 6 Value: 50 30 70 20 40 60 80

πŸ“˜  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

Popular posts from this blog

Data Structures and Algorithms PCCST303 KTU 2024 Scheme- Dr Binu V P

Memory Allocation - First Fit

Performance Analysis - Time and Space Complexity