BINARY SEARCH

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node *left, *right;
};

// Create a new node
struct Node* newNode(int item) {
    struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
    temp->data = item;
    temp->left = temp->right = NULL;
    return temp;
}

// Insert into BST
struct Node* insert(struct Node* node, int key) {
    if (node == NULL) return newNode(key);
    if (key < node->data)
        node->left = insert(node->left, key);
    else
        node->right = insert(node->right, key);
    return node;
}

// Inorder Traversal
void inorder(struct Node* root) {
    if (root != NULL) {
        inorder(root->left);
        printf("%d\n", root->data);
        inorder(root->right);
    }
}

int main() {
    int n, key;
    if (scanf("%d", &n) != 1 || n < 0 || n > 10) {
        printf("Invalid input\n");
        return 0;
    }

    if (n == 0) {
        printf("Tree is Empty\n");
        return 0;
    }

    struct Node* root = NULL;
    for (int i = 0; i < n; i++) {
        if (scanf("%d", &key) != 1 || key < -100 || key > 100) {
            printf("Invalid input\n");
            return 0;
        }
        root = insert(root, key);
    }

    inorder(root);
    return 0;
}


2D BINARY

#include <stdio.h>

int main() {
    int rows, cols;
    if (scanf("%d", &rows) != 1 || scanf("%d", &cols) != 1 || rows <= 0 || cols <= 0 || rows > 100 || cols > 100) {
        printf("Invalid input\n");
        return 0;
    }

    int matrix[100][100];

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (scanf("%d", &matrix[i][j]) != 1 || (matrix[i][j] != 0 && matrix[i][j] != 1)) {
                printf("Invalid input\n");
                return 0;
            }
        }
    }

    // Horizontal flip
    for (int i = 0; i < rows / 2; i++) {
        for (int j = 0; j < cols; j++) {
            int temp = matrix[i][j];
            matrix[i][j] = matrix[rows - 1 - i][j];
            matrix[rows - 1 - i][j] = temp;
        }
    }

    // Vertical flip
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols / 2; j++) {
            int temp = matrix[i][j];
            matrix[i][j] = matrix[i][cols - 1 - j];
            matrix[i][cols - 1 - j] = temp;
        }
    }

    // Output
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}



MATRIX ADDITION

#include <stdio.h>

int main() {
    int r, c;
    if (scanf("%d %d", &r, &c) != 2 || r <= 0 || c <= 0 || r > 100 || c > 100) {
        printf("Invalid input\n");
        return 0;
    }

    int mat1[100][100], mat2[100][100];

    // First matrix
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            if (scanf("%d", &mat1[i][j]) != 1) {
                printf("Invalid input\n");
                return 0;
            }
        }
    }

    // Second matrix
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            if (scanf("%d", &mat2[i][j]) != 1) {
                printf("Invalid input\n");
                return 0;
            }
        }
    }

    // Add and print
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            printf("%d ", mat1[i][j] + mat2[i][j]);
        }
        printf("\n");
    }

    return 0;
}