给你一个二叉树的根节点 root
, 检查它是否轴对称。
方法一:递归。左节点的值等于右节点的值。
class Solution {
public:
bool checksym(TreeNode* p,TreeNode* q){
if(p == NULL && q == NULL) return true;
if(!p || !q) return false;
return p->val == q->val && checksym(p->left,q->right) && checksym(p->right,q->left);
}
bool isSymmetric(TreeNode* root) {
return checksym(root,root);
}
};
方法二:迭代
class Solution {
public:
bool check(TreeNode *u, TreeNode *v) {
queue <TreeNode*> q;
q.push(u); q.push(v);
while (!q.empty()) {
u = q.front(); q.pop();
v = q.front(); q.pop();
if (!u && !v) continue;
if ((!u || !v) || (u->val != v->val)) return false;
q.push(u->left);
q.push(v->right);
q.push(u->right);
q.push(v->left);
}
return true;
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};