题目:
题解1:递归法
class Solution {
public:
/*解法1:递归法*/
bool isSymmetric(TreeNode* root){
if(root==nullptr)return true;
return ismirror(root->right,root->left);
}
bool ismirror(TreeNode* p,TreeNode* q){
if(!p&&!q)//都为NULL
return true;
if(!p||!q)//有一个为NULL
return false;
if(p->val==q->val)
return ismirror(p->left,q->right)&&ismirror(p->right,q->left);
return false;
}
};
题解2:利用层序遍历迭代法解题
class Solution {
public:
//解法2:迭代法,利用层序遍历比较左右子树的节点
bool isSymmetric(TreeNode* root){
if(root==nullptr)return true;
queue<TreeNode*> q;
q.push(root->left);
q.push(root->right);
while(!q.empty())
{
TreeNode *left=q.front();q.pop();
TreeNode *right=q.front();q.pop();
if(left==nullptr&&right==nullptr)//左右节点皆为空
continue;
if(left==nullptr||right==nullptr)//左右节点有一个为空
return false;
if(left->val!=right->val)return false;//节点值不等
q.push(left->left);
q.push(right->right);
q.push(right->left);
q.push(left->right);
}
return true;
}
};