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
思路:观察题意可知,如果是对称树,则每一层的数字左右对称,因此可模拟层序遍历做这道题。本程序中,定义了两个双向队列,一个代表上一层节点,一个代表下层节点。
class Solution { public: bool isSymmetricHelper(deque<TreeNode*> Q) { int n = Q.size(); int L=0,R=n-1; if (n&1) { return false; } for(; L<R; L++,R--) { if (Q[L] == NULL) { if (Q[R] != NULL) { return false; } } else { if (Q[R] == NULL) { return false; } else { if (Q[L]->val != Q[R]->val) { return false; } } } } return true; } bool isSymmetric(TreeNode *root) { deque<TreeNode*> Q; deque<TreeNode*> nextQ; if (root == NULL || (root->left == NULL && root->right == NULL)) { return true; } Q.push_back(root); TreeNode* pNode; while(!Q.empty()) { nextQ.clear(); while(!Q.empty()) { pNode = Q.front(); if (pNode != NULL) { nextQ.push_back(pNode->left); nextQ.push_back(pNode->right); } Q.pop_front(); } if (!isSymmetricHelper(nextQ)) { return false; } Q = nextQ; } return true; } };