# 【LeetCode】 101. Symmetric Tree
## Description
> Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
> 給一棵二元樹,請檢查它的鏡像是否和自己相等。(以中間為軸對稱)
## Example:
```
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1
/ \
2 2
\ \
3 3
```
## Solution
* 可以直接做一個製造鏡像樹的function,不過那樣太浪費空間了。
* 因此我們採取直接比較左子樹和右子樹的策略,比較完值確認相等之後(要注意`null`的情況),再去比較它們的子樹。
* 左子樹的左子樹要和右子樹的右子樹相等;左子樹的右子樹要和右子樹的左子樹相等。
### Code
```C++=1
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isOpposite(TreeNode* left,TreeNode* right)
{
if(!left && !right) return true;
if(!left && right) return false;
if(left && !right) return false;
if(left->val != right->val) return false;
return isOpposite(left->left,right->right) && isOpposite(left->right,right->left);
}
bool isSymmetric(TreeNode* root) {
if(!root) return true;
return isOpposite(root->left,root->right);
}
};
```
###### tags: `LeetCode` `C++`