101 - Symmetric Tree
#easy
Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).
Example 1:

Input: root = [1,2,2,3,4,4,3]
Output: true
Example 2:

Input: root = [1,2,2,null,3,null,3]
Output: false
Solution 1 - Queue
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if ( root -> left == NULL && root -> right == NULL ) return true;
queue<TreeNode*> que;
que.push(root -> left);
que.push(root -> right);
while ( !que.empty() ) {
TreeNode * leftNode = que.front();
que.pop();
TreeNode * rightNode = que.front();
que.pop();
if ( leftNode == NULL && rightNode == NULL ) {
continue;
//continue敘述可以馬上繼續下一次迴圈的執行,而不執行程式區塊未在continue敘述後的程式碼。
}
if ( ( leftNode == NULL || rightNode == NULL || ( leftNode -> val != rightNode -> val ))) {
return false;
}
que.push( leftNode -> left );
que.push( rightNode -> right );
que.push( leftNode -> right );
que.push( rightNode -> left );
}
return true;
}
};
Solution 2 - Recursive
使用后序(收集孩子的訊息向上一層返回) 左右中
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool compare( TreeNode* left_node, TreeNode* right_node ) {
if ( left_node == NULL && right_node != NULL ) return false;
else if ( left_node != NULL && right_node == NULL ) return false;
else if ( left_node == NULL && right_node == NULL ) return true;
else if ( left_node -> val != right_node -> val ) return false;
bool outside = compare( left_node -> left, right_node -> right ); // 左
bool inside = compare( left_node -> right, right_node -> left ); // 右
bool result = outside && inside; // 中