101. 对称二叉树
知识点:二叉树
题目链接
题目描述
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
代码
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool check(TreeNode* a, TreeNode* b){
if(a == nullptr && b == nullptr)
return true;
if(a != nullptr && b == nullptr)
return false;
if(a == nullptr && b != nullptr)
return false;
if(a->val == b->val){
return check(a->left,b->right) && check(a->right,b->left);
}
return false;
}
bool check2(TreeNode *t1,TreeNode *t2)
{
queue<TreeNode*> q;
q.push(t1);q.push(t2);
while(!q.empty())
{
t1 = q.front();q.pop();
t2 = q.front();q.pop();
//continue 关键
if(!t1&&!t2){continue;}
else if(!t1||!t2||(t1->val != t2->val)){return false;}
q.push(t1->left);
q.push(t2->right);
q.push(t1->right);
q.push(t2->left);
}
return true;
}
bool isSymmetric(TreeNode* root) {
return check2(root, root);
}
今天也是爱zz的一天!