题目描述
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
Constrains:
- The number of nodes in the trees is in the range [1,1000].
- − 100 < = N o d e . v a l < = 100 -100<=Node.val<=100 −100<=Node.val<=100
Follow-up: Could you solve it both recursively and iteratively?
解题思路
递归思路是判断左右子树是否相等。
迭代思路是使用队列,空间换时间。
递归代码:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root == nullptr)
return true;
return dfs(root->left, root->right);
}
bool dfs(TreeNode* left, TreeNode* right){
if(left == nullptr && right == nullptr)
return true;
if(left == nullptr || right == nullptr)
return false;
if(left->val != right->val)
return false;
return dfs(left->right, right->left) && dfs(left->left, right->right);
}
};
迭代代码:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root == nullptr)
return true;
queue<TreeNode*> q;
q.push(root->left);
q.push(root->right);
while(!q.empty()){
TreeNode* tmp1 = q.front(); q.pop();
TreeNode* tmp2 = q.front(); q.pop();
if(tmp1 == nullptr && tmp2 == nullptr)
continue;
if(tmp1 == nullptr || tmp2 == nullptr)
return false;
if(tmp1->val != tmp2->val)
return false;
q.push(tmp1->left);
q.push(tmp2->right);
q.push(tmp1->right);
q.push(tmp2->left);
}
return true;
}
};