题目描述:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
解题思路:
我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q指针一开始都指向这棵树的根,随后 p 右移时,q左移,p 左移时,q右移。每次检查当前 p 和 q节点的值是否相等,如果相等再判断左右子树是否对称。
代码实现:
class Solution {
public:
bool check(TreeNode* p,TreeNode* q)
{
if(!p&&!q) return true;
if(!p||!q) return false;
return p->val==q->val && check(p->left,q->right) && check(p->right,q->left);
}
bool isSymmetric(TreeNode* root) {
return check(root,root);
}
};