class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (root == NULL) return false;
return isSymmetric3(root->left, root->right);
}
bool isSymmetric2(TreeNode* p, TreeNode* q) {
if (p == NULL && q == NULL) return true;
if (p == NULL && q != NULL) return false;
if (p != NULL && q == NULL) return false;
return (p->val == q->val) && isSymmetric2(p->left, q->right) && isSymmetric2(p->right, q->left);
}
bool isSymmetric3(TreeNode* p, TreeNode* q) {
std::queue<TreeNode*> queue;
queue.push(p);
queue.push(q);
while (queue.size()>0)
{
TreeNode* p1 = queue.front(); queue.pop();
TreeNode* q1 = queue.front(); queue.pop();
if (p1 == NULL && q1 == NULL) continue;
if (p1 == NULL && q1 != NULL) return false;
if (p1 != NULL && q1 == NULL) return false;
if (p1->val != q1->val) return false;
queue.push(p1->left);
queue.push(q1->right);
queue.push(p1->right);
queue.push(q1->left);
}
return true;
}
};