bool isSymmetricTree(TreeNode* root){
queue q1, q2, p1, p2;
if(!root) return true;
if((!root->left) && (!root->right)) return true;
if(!(root->left && root->right && (root->left->val == root->right->val)))
return false;
q1.push(root->left);
q2.push(root->right);
TreeNode* t1;
TreeNode* t2;
while(!q1.empty()){
while(!q1.empty()){
t1=q1.front();
t2=q2.front();
q1.pop();
q2.pop();
if(t1->left && t2->right && (t1->left->val == t2->right->val)){
p1.push(t1->left);
p2.push(t2->right);
} else if(!(t1->left == NULL && t2->right == NULL)) return false;
if(t2->left && t1->right && (t2->left->val == t1->right->val)){
p1.push(t2->left);
p2.push(t1->right);
} else if(!(t2->left == NULL && t1->right == NULL)) return false;
}
if(!q2.empty()) return false;
swap(q1, p1);
swap(q2, p2);
}
if(!q2.empty()) return false;
return true;
}