#include<stdio.h>
#include<stdlib.h>
struct tree
{
struct tree* left;
struct tree* right;
int x;
};
struct tree* makenode(int x)
{
struct tree
* root
= malloc(sizeof(struct tree
)); root -> x = x;
root -> left = root -> right = NULL;
return root;
}
struct tree* makeBST(int *post, int start, int n, int inorder){
if(n <= 0)
return NULL;
int pivot = post[start + n -1];
struct tree * root = makenode(pivot);
root -> left = makeBST(post, start, pivot-1 - inorder, inorder );
root -> right = makeBST(post, pivot - inorder - 1, n - (pivot - inorder), pivot);
return root;
}
void preorder(struct tree* node)
{
if(node == NULL)
return;
preorder(node->left);
preorder(node->right);
}
void printdot(struct tree* node, FILE * f)
{
if(node == NULL)
return;
if(node-> left != NULL)
{
fprintf(f
, "%d -- %d;\n", node
->x
, node
->left
->x
); }
if(node-> right != NULL)
{
fprintf(f
, "%d -- %d;\n", node
->x
, node
->right
->x
); }
printdot(node->left, f);
printdot(node->right, f);
}
int main(){
int i, n, *a;
printf ("Enter post order traversal: "); for(i = 0; i < n; i++)
{
}
struct tree * tree = makeBST(a, 0, n, 0);
printf("Pre order traversal is : "); preorder(tree);
FILE
* f
= fopen("tree.dot", "w"); printdot(tree, f);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CnN0cnVjdCB0cmVlCnsKICAgIHN0cnVjdCB0cmVlKiBsZWZ0OwogICAgc3RydWN0IHRyZWUqIHJpZ2h0OwogICAgaW50IHg7Cn07CnN0cnVjdCB0cmVlKiBtYWtlbm9kZShpbnQgeCkgCnsKICAgIHN0cnVjdCB0cmVlICogcm9vdCA9ICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmVlKSk7CiAgICByb290IC0+IHggPSB4OwogICAgcm9vdCAtPiBsZWZ0ID0gcm9vdCAtPiByaWdodCA9IE5VTEw7CiAgICByZXR1cm4gcm9vdDsKfQoKc3RydWN0IHRyZWUqIG1ha2VCU1QoaW50ICpwb3N0LCBpbnQgc3RhcnQsIGludCBuLCBpbnQgaW5vcmRlcil7CiAgICBpZihuIDw9IDApCiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgaW50IHBpdm90ID0gcG9zdFtzdGFydCArIG4gLTFdOwogICAgc3RydWN0IHRyZWUgKiByb290ID0gbWFrZW5vZGUocGl2b3QpOwogICAgcm9vdCAtPiBsZWZ0ID0gbWFrZUJTVChwb3N0LCBzdGFydCwgcGl2b3QtMSAtIGlub3JkZXIsIGlub3JkZXIgKTsKICAgIHJvb3QgLT4gcmlnaHQgPSBtYWtlQlNUKHBvc3QsIHBpdm90IC0gaW5vcmRlciAtIDEsIG4gLSAocGl2b3QgLSBpbm9yZGVyKSwgcGl2b3QpOwogICAgcmV0dXJuIHJvb3Q7Cn0Kdm9pZCBwcmVvcmRlcihzdHJ1Y3QgdHJlZSogbm9kZSkKewogICAgaWYobm9kZSA9PSBOVUxMKQogICAgICAgIHJldHVybjsKICAgIHByaW50ZigiJWQgIiwgbm9kZS0+eCk7CiAgICBwcmVvcmRlcihub2RlLT5sZWZ0KTsKICAgIHByZW9yZGVyKG5vZGUtPnJpZ2h0KTsKfQp2b2lkIHByaW50ZG90KHN0cnVjdCB0cmVlKiBub2RlLCBGSUxFICogZikKewogICAgaWYobm9kZSA9PSBOVUxMKQogICAgICAgIHJldHVybjsKICAgIGlmKG5vZGUtPiBsZWZ0ICE9IE5VTEwpCiAgICB7CiAgICAgICAgZnByaW50ZihmLCAiJWQgLS0gJWQ7XG4iLCBub2RlLT54LCBub2RlLT5sZWZ0LT54KTsKICAgIH0KICAgIGlmKG5vZGUtPiByaWdodCAhPSBOVUxMKQogICAgewogICAgICAgIGZwcmludGYoZiwgIiVkIC0tICVkO1xuIiwgbm9kZS0+eCwgbm9kZS0+cmlnaHQtPngpOwogICAgfQogICAgcHJpbnRkb3Qobm9kZS0+bGVmdCwgZik7CiAgICBwcmludGRvdChub2RlLT5yaWdodCwgZik7Cn0KCmludCBtYWluKCl7CiAgICBpbnQgaSwgbiwgKmE7CiAgICBwcmludGYoIkVudGVyIG46ICIpOwogICAgc2NhbmYoIiVkIiwgJm4pOwogICAgYSA9IG1hbGxvYyhuICogc2l6ZW9mKGludCkpOwogICAgcHJpbnRmICgiRW50ZXIgcG9zdCBvcmRlciB0cmF2ZXJzYWw6ICIpOwogICAgZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIHNjYW5mKCIlZCIsICZhW2ldKTsKICAgIH0KICAgIHN0cnVjdCB0cmVlICogdHJlZSA9IG1ha2VCU1QoYSwgMCwgbiwgMCk7CiAgICBwcmludGYoIlByZSBvcmRlciB0cmF2ZXJzYWwgaXMgOiAiKTsKICAgIHByZW9yZGVyKHRyZWUpOwogICAgcHJpbnRmKCJcbiIpOwogICAgRklMRSAqIGYgPSBmb3BlbigidHJlZS5kb3QiLCAidyIpOwogICAgZnByaW50ZihmLCAiZ3JhcGggdHJlZSB7IFxuIik7CiAgICBwcmludGRvdCh0cmVlLCBmKTsKICAgIGZwcmludGYoZiwgIn1cbiIpOwogICAgZmNsb3NlKGYpOwoJcmV0dXJuIDA7Cn0K