/**
* 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 isSymmetric(TreeNode* root) {
// if (root == NULL)
// return true;
// return check(root->left, root->right);
// }
// bool check(TreeNode* left, TreeNode* right){
// if (left == NULL && right == NULL)
// return true;
// if (left == NULL || right == NULL || left->val != right->val)
// return false;
// return check(left->left, right->right) && check(left->right, right->left);
// }
// };
// 迭代
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (root == NULL)
return true;
queue<TreeNode*> left;
queue<TreeNode*> right;
left.push(root->left);
right.push(root->right);
// 用2个队列来分别存储左右子树
while(!left.empty() && !right.empty()){
TreeNode* left_node = left.front();
TreeNode* right_node = right.front();
left.pop();
right.pop();
if (left_node == NULL && right_node == NULL)
continue;
if ((left_node == NULL && right_node != NULL) || (left_node != NULL && right_node == NULL))
return false;
if (left_node->val != right_node->val)
return false;
// 这里注意添加的顺序
left.push(left_node->left);
left.push(left_node->right);
right.push(right_node->right);
right.push(right_node->left);
}
return true;
}
};
static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();