#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<stdbool.h>
typedef struct node {
int val;
struct node *next;
} node;
typedef struct Treenode {
int val;
struct Treenode *left;
struct Treenode *right;
} Treenode;
Treenode *createnode(){
Treenode *totree = (Treenode*)malloc(sizeof(Treenode));
totree->left=NULL;
totree->right=NULL;
return totree;
}
void InOrder(Treenode *root){
if(!root) return;
InOrder(root->left);
printf("%d ",root->val);
InOrder(root->right);
}
void preOrder(Treenode *root){
if(!root) return;
printf("%d ",root->val);
preOrder(root->left);
preOrder(root->right);
}
void PostOrder(Treenode *root){
if(!root) return;
PostOrder(root->left);
PostOrder(root->right);
printf("%d ",root->val);
}
Treenode *arrayTotree(int *a, int size ,int i){
if(i>=size) return NULL;
Treenode *root=createnode();
root->val=a[i];
root->left=arrayTotree(a,size,2*i+1);
root->right=arrayTotree(a,size,2*i+2);
return root;
}
bool isMirror_help(Treenode *p,Treenode *q){
if(!p && !q) return true;
else if(!p || !q) return false;
if(p->val != q->val) return false;
return isMirror_help(p->left,q->right) && isMirror_help(p->right,q->left);
}
bool isMirror(Treenode *root){
if(!root) return true;
return isMirror_help(root->left,root->right);
}
int main(){
Treenode *root=createnode();
root->val=1;
Treenode *left=createnode();
left->val=2;
Treenode *right=createnode();
right->val=3;
int mehdi[]={1,2,3,4,5};
root->right=right;
root->left=left;
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
preOrder(root);
printf("\n");
if(!isMirror(root)) printf("Nice\n");
Treenode *newnode= arrayTotree(mehdi,5,0);
InOrder(newnode);
printf("\n");
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPGxpbWl0cy5oPgojaW5jbHVkZTxzdGRib29sLmg+Cgp0eXBlZGVmIHN0cnVjdCBub2RlIHsKICBpbnQgdmFsOwogIHN0cnVjdCBub2RlICpuZXh0Owp9IG5vZGU7Cgp0eXBlZGVmIHN0cnVjdCBUcmVlbm9kZSB7CiAgICAgICAgaW50IHZhbDsKICAgICAgICBzdHJ1Y3QgVHJlZW5vZGUgKmxlZnQ7CiAgICAgICAgc3RydWN0IFRyZWVub2RlICpyaWdodDsKfSBUcmVlbm9kZTsKCiAgIFRyZWVub2RlICpjcmVhdGVub2RlKCl7CiAgICAgICAgVHJlZW5vZGUgKnRvdHJlZSA9IChUcmVlbm9kZSopbWFsbG9jKHNpemVvZihUcmVlbm9kZSkpOwogICAgICAgIHRvdHJlZS0+bGVmdD1OVUxMOwogICAgICAgIHRvdHJlZS0+cmlnaHQ9TlVMTDsKICAgICAgICByZXR1cm4gdG90cmVlOwogICB9CgogICB2b2lkIEluT3JkZXIoVHJlZW5vZGUgKnJvb3QpewogICAgICAgIGlmKCFyb290KSByZXR1cm47CiAgICAgICAgSW5PcmRlcihyb290LT5sZWZ0KTsKICAgICAgICBwcmludGYoIiVkICIscm9vdC0+dmFsKTsKICAgICAgICBJbk9yZGVyKHJvb3QtPnJpZ2h0KTsKICAgfQoKICAgdm9pZCBwcmVPcmRlcihUcmVlbm9kZSAqcm9vdCl7CiAgICAgICAgaWYoIXJvb3QpIHJldHVybjsKICAgICAgICBwcmludGYoIiVkICIscm9vdC0+dmFsKTsKICAgICAgICBwcmVPcmRlcihyb290LT5sZWZ0KTsKICAgICAgICBwcmVPcmRlcihyb290LT5yaWdodCk7CiAgIH0KCiAgIHZvaWQgUG9zdE9yZGVyKFRyZWVub2RlICpyb290KXsKICAgICAgICBpZighcm9vdCkgcmV0dXJuOwogICAgICAgIFBvc3RPcmRlcihyb290LT5sZWZ0KTsKICAgICAgICBQb3N0T3JkZXIocm9vdC0+cmlnaHQpOwogICAgICAgIHByaW50ZigiJWQgIixyb290LT52YWwpOwogICB9CgogICBUcmVlbm9kZSAqYXJyYXlUb3RyZWUoaW50ICphLCBpbnQgc2l6ZSAsaW50IGkpewogICAgICAgIGlmKGk+PXNpemUpIHJldHVybiBOVUxMOwogICAgICAgIFRyZWVub2RlICpyb290PWNyZWF0ZW5vZGUoKTsKICAgICAgICByb290LT52YWw9YVtpXTsKICAgICAgICByb290LT5sZWZ0PWFycmF5VG90cmVlKGEsc2l6ZSwyKmkrMSk7CiAgICAgICAgcm9vdC0+cmlnaHQ9YXJyYXlUb3RyZWUoYSxzaXplLDIqaSsyKTsKICAgICAgICByZXR1cm4gcm9vdDsKICAgfQoKICAgYm9vbCBpc01pcnJvcl9oZWxwKFRyZWVub2RlICpwLFRyZWVub2RlICpxKXsKICAgICAgICBpZighcCAmJiAhcSkgcmV0dXJuIHRydWU7CiAgICAgICAgZWxzZSBpZighcCB8fCAhcSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKHAtPnZhbCAhPSBxLT52YWwpIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gaXNNaXJyb3JfaGVscChwLT5sZWZ0LHEtPnJpZ2h0KSAmJiBpc01pcnJvcl9oZWxwKHAtPnJpZ2h0LHEtPmxlZnQpOwogICB9CgogICBib29sIGlzTWlycm9yKFRyZWVub2RlICpyb290KXsKICAgICAgICBpZighcm9vdCkgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuIGlzTWlycm9yX2hlbHAocm9vdC0+bGVmdCxyb290LT5yaWdodCk7CiAgIH0KCgogICBpbnQgbWFpbigpewoKICAgICAgICBUcmVlbm9kZSAqcm9vdD1jcmVhdGVub2RlKCk7CiAgICAgICAgcm9vdC0+dmFsPTE7CiAgICAgICAgVHJlZW5vZGUgKmxlZnQ9Y3JlYXRlbm9kZSgpOwogICAgICAgIGxlZnQtPnZhbD0yOwogICAgICAgIFRyZWVub2RlICpyaWdodD1jcmVhdGVub2RlKCk7CiAgICAgICAgcmlnaHQtPnZhbD0zOwoKICAgICAgICBpbnQgbWVoZGlbXT17MSwyLDMsNCw1fTsKCiAgICAgICAgcm9vdC0+cmlnaHQ9cmlnaHQ7CiAgICAgICAgcm9vdC0+bGVmdD1sZWZ0OwoKICAgICAgICBJbk9yZGVyKHJvb3QpOwogICAgICAgIHByaW50ZigiXG4iKTsKCiAgICAgICAgUG9zdE9yZGVyKHJvb3QpOwogICAgICAgIHByaW50ZigiXG4iKTsKCiAgICAgICAgcHJlT3JkZXIocm9vdCk7CiAgICAgICAgcHJpbnRmKCJcbiIpOwoKICAgICAgICBpZighaXNNaXJyb3Iocm9vdCkpIHByaW50ZigiTmljZVxuIik7CgogICAgICAgIFRyZWVub2RlICpuZXdub2RlPSBhcnJheVRvdHJlZShtZWhkaSw1LDApOwogICAgICAgIEluT3JkZXIobmV3bm9kZSk7CiAgICAgICAgcHJpbnRmKCJcbiIpOwoKICAgfQoKCg==