#include #include typedef struct Node { int data; struct Node *left; struct Node *right; } Node; // Create Node for the Binary Tree Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); if (newNode == NULL) { printf("Memory allocation error!\n"); exit(1); } newNode->data = data; newNode->left = NULL; newNode->right = NULL; return newNode; } // Function to check if two trees are mirror images of each other int areMirror(Node* tree1, Node* tree2) { // both tree empty, mirror if (tree1 == NULL && tree2 == NULL) { return 1; } // one tree empty, not mirror if (tree1 == NULL || tree2 == NULL) { return 0; } // check recursively their subtrees return (tree1->data == tree2->data) && areMirror(tree1->left, tree2->right) && areMirror(tree1->right, tree2->left); } // Function to print the tree in-order void printTree(Node* root) { if (root == NULL) { return; } printTree(root->left); printf("%d ", root->data); printTree(root->right); } int main() { Node *root1 = createNode(1); root1->left = createNode(2); root1->right = createNode(3); root1->left->left = createNode(4); root1->left->right = createNode(5); //6 Node *root2 = createNode(1); root2->left = createNode(3); root2->right = createNode(2); root2->right->left = createNode(5); root2->right->right = createNode(4); printf("Tree 1 (In-Order): "); printTree(root1); printf("\n"); printf("Tree 2 (In-Order): "); printTree(root2); printf("\n"); if (areMirror(root1, root2)) { printf("The trees are mirror images.\n"); } else { printf("The trees are not mirror images.\n"); } return 0; }