递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//判断两颗树是否镜面对称
bool Check(struct TreeNode * Left, struct TreeNode * Right){
if(Left==NULL && Right==NULL) return true;
if(Left==NULL || Right==NULL) return false;
if(Left->val != Right->val) return false;
else{
return Check( Left->right, Right->left ) && Check( Left->left, Right->right );
}
}
bool isSymmetric(struct TreeNode* root){
if(root == NULL) return NULL;
return Check(root->left, root->right);
}
迭代
//每次提取两个结点并比较它们的值
//然后将两个结点的左右子结点按相反的顺序插入队列中。
bool isSymmetric(struct TreeNode* root){
struct TreeNode * que[500];
int front=0, rear=-1;
struct TreeNode * u = root -> left;
struct TreeNode * v = root -> right;
que[++rear] = u;
que[++rear] = v;
while(rear>=front){
u = que[front++];
v = que[front++];
if(u==NULL && v==NULL) continue;
if(u==NULL || v==NULL) return false;
if(u->val != v->val) return false;
que[++rear] = u->left;
que[++rear] = v->right;
que[++rear] = u->right;
que[++rear] = v->left;
}
return true;
}