#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
struct Node* createNode(int data) {
struct Node
* newNode
= (struct Node
*)malloc(sizeof(struct Node
)); newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
struct Node* insert(struct Node* root, int data) {
if (root == NULL) {
return createNode(data);
} else {
if (data <= root->data) {
root->left = insert(root->left, data);
} else {
root->right = insert(root->right, data);
}
return root;
}
}
void preorder(struct Node* root) {
if (root != NULL) {
preorder(root->left);
preorder(root->right);
}
}
void inorder(struct Node* root) {
if (root != NULL) {
inorder(root->left);
inorder(root->right);
}
}
void postorder(struct Node* root) {
if (root != NULL) {
postorder(root->left);
postorder(root->right);
}
}
int main() {
struct Node* root = NULL;
char choice;
int data;
do {
printf("Enter data for node: "); root = insert(root, data);
printf("Do you want to enter more nodes? (Y/N): "); } while (choice == 'Y' || choice == 'y');
printf("\nEnter traversal choice (P for preorder, I for inorder, O for postorder): ");
switch(choice) {
case 'P':
case 'p':
printf("Preorder traversal: "); preorder(root);
break;
case 'I':
case 'i':
printf("Inorder traversal: "); inorder(root);
break;
case 'O':
case 'o':
printf("Postorder traversal: "); postorder(root);
break;
default:
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBOb2RlIHsKICAgIGludCBkYXRhOwogICAgc3RydWN0IE5vZGUqIGxlZnQ7CiAgICBzdHJ1Y3QgTm9kZSogcmlnaHQ7Cn07CgpzdHJ1Y3QgTm9kZSogY3JlYXRlTm9kZShpbnQgZGF0YSkgewogICAgc3RydWN0IE5vZGUqIG5ld05vZGUgPSAoc3RydWN0IE5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IE5vZGUpKTsKICAgIG5ld05vZGUtPmRhdGEgPSBkYXRhOwogICAgbmV3Tm9kZS0+bGVmdCA9IE5VTEw7CiAgICBuZXdOb2RlLT5yaWdodCA9IE5VTEw7CiAgICByZXR1cm4gbmV3Tm9kZTsKfQoKc3RydWN0IE5vZGUqIGluc2VydChzdHJ1Y3QgTm9kZSogcm9vdCwgaW50IGRhdGEpIHsKICAgIGlmIChyb290ID09IE5VTEwpIHsKICAgICAgICByZXR1cm4gY3JlYXRlTm9kZShkYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGRhdGEgPD0gcm9vdC0+ZGF0YSkgewogICAgICAgICAgICByb290LT5sZWZ0ID0gaW5zZXJ0KHJvb3QtPmxlZnQsIGRhdGEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJvb3QtPnJpZ2h0ID0gaW5zZXJ0KHJvb3QtPnJpZ2h0LCBkYXRhKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvb3Q7CiAgICB9Cn0KCnZvaWQgcHJlb3JkZXIoc3RydWN0IE5vZGUqIHJvb3QpIHsKICAgIGlmIChyb290ICE9IE5VTEwpIHsKICAgICAgICBwcmludGYoIiVkICIsIHJvb3QtPmRhdGEpOwogICAgICAgIHByZW9yZGVyKHJvb3QtPmxlZnQpOwogICAgICAgIHByZW9yZGVyKHJvb3QtPnJpZ2h0KTsKICAgIH0KfQoKdm9pZCBpbm9yZGVyKHN0cnVjdCBOb2RlKiByb290KSB7CiAgICBpZiAocm9vdCAhPSBOVUxMKSB7CiAgICAgICAgaW5vcmRlcihyb290LT5sZWZ0KTsKICAgICAgICBwcmludGYoIiVkICIsIHJvb3QtPmRhdGEpOwogICAgICAgIGlub3JkZXIocm9vdC0+cmlnaHQpOwogICAgfQp9Cgp2b2lkIHBvc3RvcmRlcihzdHJ1Y3QgTm9kZSogcm9vdCkgewogICAgaWYgKHJvb3QgIT0gTlVMTCkgewogICAgICAgIHBvc3RvcmRlcihyb290LT5sZWZ0KTsKICAgICAgICBwb3N0b3JkZXIocm9vdC0+cmlnaHQpOwogICAgICAgIHByaW50ZigiJWQgIiwgcm9vdC0+ZGF0YSk7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgc3RydWN0IE5vZGUqIHJvb3QgPSBOVUxMOwogICAgY2hhciBjaG9pY2U7CiAgICBpbnQgZGF0YTsKICAgIAogICAgZG8gewogICAgICAgIHByaW50ZigiRW50ZXIgZGF0YSBmb3Igbm9kZTogIik7CiAgICAgICAgc2NhbmYoIiVkIiwgJmRhdGEpOwogICAgICAgIHJvb3QgPSBpbnNlcnQocm9vdCwgZGF0YSk7CiAgICAgICAgCiAgICAgICAgcHJpbnRmKCJEbyB5b3Ugd2FudCB0byBlbnRlciBtb3JlIG5vZGVzPyAoWS9OKTogIik7CiAgICAgICAgc2NhbmYoIiAlYyIsICZjaG9pY2UpOwogICAgfSB3aGlsZSAoY2hvaWNlID09ICdZJyB8fCBjaG9pY2UgPT0gJ3knKTsKICAgIAogICAgcHJpbnRmKCJcbkVudGVyIHRyYXZlcnNhbCBjaG9pY2UgKFAgZm9yIHByZW9yZGVyLCBJIGZvciBpbm9yZGVyLCBPIGZvciBwb3N0b3JkZXIpOiAiKTsKICAgIHNjYW5mKCIgJWMiLCAmY2hvaWNlKTsKICAgIAogICAgc3dpdGNoKGNob2ljZSkgewogICAgICAgIGNhc2UgJ1AnOgogICAgICAgIGNhc2UgJ3AnOgogICAgICAgICAgICBwcmludGYoIlByZW9yZGVyIHRyYXZlcnNhbDogIik7CiAgICAgICAgICAgIHByZW9yZGVyKHJvb3QpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdJJzoKICAgICAgICBjYXNlICdpJzoKICAgICAgICAgICAgcHJpbnRmKCJJbm9yZGVyIHRyYXZlcnNhbDogIik7CiAgICAgICAgICAgIGlub3JkZXIocm9vdCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ08nOgogICAgICAgIGNhc2UgJ28nOgogICAgICAgICAgICBwcmludGYoIlBvc3RvcmRlciB0cmF2ZXJzYWw6ICIpOwogICAgICAgICAgICBwb3N0b3JkZXIocm9vdCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBjaG9pY2UhIik7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCg==