#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct tree {
int data;
struct tree *right;
struct tree *left;
} tree;
void inorder_tree(tree *root);
void preorder_tree(tree *root);
void postorder_tree(tree *root);
tree *insert_tree(tree *root, int data);
int main(void)
{
int i;
int a[5];
for (i = 0; i < 5; i++)
tree *root = NULL;
for (i = 0; i < 5; i++)
root = insert_tree(root, a[i]);
inorder_tree(root);
preorder_tree(root);
postorder_tree(root);
return 0;
}
void inorder_tree(tree *root)
{
if (root == NULL)
return;
inorder_tree(root->left);
inorder_tree(root->right);
return;
}
void preorder_tree(tree *root)
{
if (root == NULL)
return;
preorder_tree(root->left);
preorder_tree(root->right);
return;
}
void postorder_tree(tree *root)
{
if (root == NULL)
return;
postorder_tree(root->left);
postorder_tree(root->right);
return;
}
tree *insert_tree(tree *root, int data)
{
tree *current;
current
= (tree
*)malloc(sizeof(tree
)); current->data = data;
if (root == NULL) {
current->right = NULL;
current->left = NULL;
return (current);
}
if (data < root->data)
root->left = insert_tree(root->left, data);
else
root->right = insert_tree(root->right, data);
return (root);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgp0eXBlZGVmIHN0cnVjdCB0cmVlIHsKCWludCBkYXRhOwoJc3RydWN0IHRyZWUgKnJpZ2h0OwoJc3RydWN0IHRyZWUgKmxlZnQ7Cn0gdHJlZTsKCnZvaWQgaW5vcmRlcl90cmVlKHRyZWUgKnJvb3QpOwp2b2lkIHByZW9yZGVyX3RyZWUodHJlZSAqcm9vdCk7CnZvaWQgcG9zdG9yZGVyX3RyZWUodHJlZSAqcm9vdCk7CnRyZWUgKmluc2VydF90cmVlKHRyZWUgKnJvb3QsIGludCBkYXRhKTsKCmludCBtYWluKHZvaWQpCnsKCWludCBpOwoJaW50IGFbNV07Cglmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQoJCXNjYW5mKCIlZCIsICZhW2ldKTsKCXRyZWUgKnJvb3QgPSBOVUxMOwoJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKCQlyb290ID0gaW5zZXJ0X3RyZWUocm9vdCwgYVtpXSk7CglwcmludGYoImlub3JkZXJcbiIpOwoJaW5vcmRlcl90cmVlKHJvb3QpOwoJcHJpbnRmKCJwcmVvcmRlclxuIik7CglwcmVvcmRlcl90cmVlKHJvb3QpOwoJcHJpbnRmKCJwb3N0b3JkZXJcbiIpOwoJcG9zdG9yZGVyX3RyZWUocm9vdCk7CglyZXR1cm4gMDsKfQp2b2lkIGlub3JkZXJfdHJlZSh0cmVlICpyb290KQp7CglpZiAocm9vdCA9PSBOVUxMKQoJCXJldHVybjsKCWlub3JkZXJfdHJlZShyb290LT5sZWZ0KTsKCXByaW50ZigiJWRcbiIsIHJvb3QtPmRhdGEpOwoJaW5vcmRlcl90cmVlKHJvb3QtPnJpZ2h0KTsKCXJldHVybjsKfQp2b2lkIHByZW9yZGVyX3RyZWUodHJlZSAqcm9vdCkKewoJaWYgKHJvb3QgPT0gTlVMTCkKCQlyZXR1cm47CglwcmludGYoIiVkXG4iLCByb290LT5kYXRhKTsKCXByZW9yZGVyX3RyZWUocm9vdC0+bGVmdCk7CglwcmVvcmRlcl90cmVlKHJvb3QtPnJpZ2h0KTsKCXJldHVybjsKfQp2b2lkIHBvc3RvcmRlcl90cmVlKHRyZWUgKnJvb3QpCnsKCWlmIChyb290ID09IE5VTEwpCgkJcmV0dXJuOwoJcG9zdG9yZGVyX3RyZWUocm9vdC0+bGVmdCk7Cglwb3N0b3JkZXJfdHJlZShyb290LT5yaWdodCk7CglwcmludGYoIiVkXG4iLCByb290LT5kYXRhKTsKCXJldHVybjsKfQp0cmVlICppbnNlcnRfdHJlZSh0cmVlICpyb290LCBpbnQgZGF0YSkKewoJdHJlZSAqY3VycmVudDsKCWN1cnJlbnQgPSAodHJlZSAqKW1hbGxvYyhzaXplb2YodHJlZSkpOwoJYXNzZXJ0KGN1cnJlbnQgIT0gTlVMTCk7CgljdXJyZW50LT5kYXRhID0gZGF0YTsKCWlmIChyb290ID09IE5VTEwpIHsKCQljdXJyZW50LT5yaWdodCA9IE5VTEw7CgkJY3VycmVudC0+bGVmdCA9IE5VTEw7CgkJcmV0dXJuIChjdXJyZW50KTsKCX0KCWlmIChkYXRhIDwgcm9vdC0+ZGF0YSkKCQlyb290LT5sZWZ0ID0gaW5zZXJ0X3RyZWUocm9vdC0+bGVmdCwgZGF0YSk7CgllbHNlCgkJcm9vdC0+cmlnaHQgPSBpbnNlcnRfdHJlZShyb290LT5yaWdodCwgZGF0YSk7CglyZXR1cm4gKHJvb3QpOwp9