这道题目采用递归法。
如下:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool isMirrorTree(TreeNode* p, TreeNode* q)
{
if(p == NULL && q == NULL) return true; //说明两边都是空,必然对称
if(p == NULL || q == NULL) return false; //一边有一边没有,不对称
if(p->val == q->val) //值相同的时候进入递归,p的左子树和q的右子树比较,p的右子树和q的左子树比较
return isMirrorTree(p->left, q->right) && isMirrorTree(p->right, q->left);
return false;
}
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot == NULL) //空树为true
return true;
return isMirrorTree(pRoot->left, pRoot->right); //进入左右子树比较
}
};