#include<stdio.h>
#include<stdlib.h>
struct TNode
{
char data;
struct TNode* left;
struct TNode* right;
};
struct TNode* newNode(char data);
struct TNode* arrayToTree(char arr[], int start, int end)
{
if (start > end)
return NULL;
int mid = (start + end)/2;
struct TNode *root = newNode(arr[mid]);
root->left = arrayToTree(arr, start, mid-1);
root->right - arrayToTree(arr, mid+1, end);
return root;
}
struct TNode* newNode(char data)
{
struct TNode* node = (struct TNode*)malloc(sizeof(struct TNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
void preOrder(struct TNode* node)
{
if (node == NULL)
return;
printf("%c", node->data);
preOrder(node->left);
preOrder(node->right);
}
void reverseArray(char *arr, int start, int end) {
while(start<end) {
char x = arr[start];
arr[start++] = arr[end];
arr[end--] = x;
}
}
void updateArray(char *arr, int n) {
int size;
for (size=0; arr[size]!='\0'; ++size);
reverseArray( arr, 0, size - 1 );
reverseArray( arr, 0, n-1);
reverseArray( arr, n, size - 1 );
}
int main()
{
char arr[] = "iihnug*cpgrg";
int n;
for(n=0; arr[n]!='\0'; ++n);
struct TNode *root = arrayToTree(arr, 0, n-1);
preOrder(root);
printf("-");
updateArray(arr, 4);
root = arrayToTree(arr, 0, n-2);
preOrder(root);
printf("-");
updateArray(arr, 2);
root = arrayToTree(arr, 0, n-1);
preOrder (root);
printf("-");
updateArray(arr, 1);
root = arrayToTree(arr, 0, n-3);
preOrder(root);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgpzdHJ1Y3QgVE5vZGUKewogY2hhciBkYXRhOwogc3RydWN0IFROb2RlKiBsZWZ0Owogc3RydWN0IFROb2RlKiByaWdodDsKfTsKCnN0cnVjdCBUTm9kZSogbmV3Tm9kZShjaGFyIGRhdGEpOwoKc3RydWN0IFROb2RlKiBhcnJheVRvVHJlZShjaGFyIGFycltdLCBpbnQgc3RhcnQsIGludCBlbmQpCnsKIGlmIChzdGFydCA+IGVuZCkKICByZXR1cm4gTlVMTDsKIGludCBtaWQgPSAoc3RhcnQgKyBlbmQpLzI7CiAKc3RydWN0IFROb2RlICpyb290ID0gbmV3Tm9kZShhcnJbbWlkXSk7Cgpyb290LT5sZWZ0ID0gYXJyYXlUb1RyZWUoYXJyLCBzdGFydCwgbWlkLTEpOwoKcm9vdC0+cmlnaHQgLSBhcnJheVRvVHJlZShhcnIsIG1pZCsxLCBlbmQpOwoKcmV0dXJuIHJvb3Q7Cn0KCnN0cnVjdCBUTm9kZSogbmV3Tm9kZShjaGFyIGRhdGEpCnsKc3RydWN0IFROb2RlKiBub2RlID0gKHN0cnVjdCBUTm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3QgVE5vZGUpKTsKCm5vZGUtPmRhdGEgPSBkYXRhOwoKbm9kZS0+bGVmdCA9IE5VTEw7Cgpub2RlLT5yaWdodCA9IE5VTEw7CgpyZXR1cm4gbm9kZTsKCn0KCnZvaWQgcHJlT3JkZXIoc3RydWN0IFROb2RlKiBub2RlKQp7CgppZiAobm9kZSA9PSBOVUxMKQogcmV0dXJuOwpwcmludGYoIiVjIiwgbm9kZS0+ZGF0YSk7CnByZU9yZGVyKG5vZGUtPmxlZnQpOwpwcmVPcmRlcihub2RlLT5yaWdodCk7Cn0Kdm9pZCByZXZlcnNlQXJyYXkoY2hhciAqYXJyLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKIHdoaWxlKHN0YXJ0PGVuZCkgewogIGNoYXIgeCA9IGFycltzdGFydF07CiAgYXJyW3N0YXJ0KytdID0gYXJyW2VuZF07CiAgYXJyW2VuZC0tXSA9IHg7CiAgfQp9IAoKdm9pZCB1cGRhdGVBcnJheShjaGFyICphcnIsIGludCBuKSB7CiBpbnQgc2l6ZTsKIGZvciAoc2l6ZT0wOyBhcnJbc2l6ZV0hPSdcMCc7ICsrc2l6ZSk7CiAgcmV2ZXJzZUFycmF5KCBhcnIsIDAsIHNpemUgLSAxICk7CiByZXZlcnNlQXJyYXkoIGFyciwgMCwgbi0xKTsKIHJldmVyc2VBcnJheSggYXJyLCBuLCBzaXplIC0gMSApOwoKfQoKaW50IG1haW4oKQp7CmNoYXIgYXJyW10gPSAiaWlobnVnKmNwZ3JnIjsKaW50IG47CmZvcihuPTA7IGFycltuXSE9J1wwJzsgKytuKTsKc3RydWN0IFROb2RlICpyb290ID0gYXJyYXlUb1RyZWUoYXJyLCAwLCBuLTEpOwpwcmVPcmRlcihyb290KTsKIHByaW50ZigiLSIpOwoKdXBkYXRlQXJyYXkoYXJyLCA0KTsKCnJvb3QgPSBhcnJheVRvVHJlZShhcnIsIDAsIG4tMik7CgpwcmVPcmRlcihyb290KTsKCnByaW50ZigiLSIpOwoKdXBkYXRlQXJyYXkoYXJyLCAyKTsKCnJvb3QgPSBhcnJheVRvVHJlZShhcnIsIDAsIG4tMSk7CiBwcmVPcmRlciAocm9vdCk7CgpwcmludGYoIi0iKTsKCnVwZGF0ZUFycmF5KGFyciwgMSk7Cgogcm9vdCA9IGFycmF5VG9UcmVlKGFyciwgMCwgbi0zKTsKCnByZU9yZGVyKHJvb3QpOwpyZXR1cm4gMDsKfQo=