1、题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的
2、解题思路
自顶向下,递归的解决该问题,了解了对称二叉树就很容易解决该问题了。
对称二叉树如下图所示:
代码如下:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot){
return isSame(pRoot, pRoot);
}
bool isSame(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot1 == nullptr && pRoot2 == nullptr)//如果pRoot1、pRoot2两个结点都为空,则返回true
return true;
if(pRoot1 == nullptr || pRoot2 == nullptr)//如果结点pRoot1或者pRoot2为空,则返回false
return false;
if(pRoot1 -> val != pRoot2-> val)//如果pRoot1、pRoot2两个结点值不相等,则返回false
return false;
//将pRoot1的左子节点与pRoot2的右子节点进行比较,pRoot1的右子节点与pRoot2的左子节点进行比较
return isSame(pRoot1 -> left, pRoot2 -> right) && isSame(pRoot1 ->right, pRoot2 -> left);
}
};