Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
1. 递归
bool isSymmetric(TreeNode *p, TreeNode *q){ if (p==NULL && q==NULL) return true; if (p==NULL || q==NULL) return false; return (p->val == q->val) && isSymmetric(p->left, q->right) && isSymmetric(p->right, q->left); }
2. 非递归
bool isSymmetric(TreeNode *p, TreeNode *q) { queue<TreeNode*> q1; queue<TreeNode*> q2; q1.push(p); q2.push(q); while(q1.size()>0 && q2.size()>0){ TreeNode* p1 = q1.front(); q1.pop(); TreeNode* p2 = q2.front(); q2.pop(); if (p1==NULL && p2==NULL) continue; if (p1==NULL || p2==NULL) return false; if (p1->val != p2->val) return false; q1.push(p1->left); q2.push(p2->right); q1.push(p1->right); q2.push(p2->left); } return true; }