剑指offer-对称的二叉树(C++)

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);
    }

};
原创文章 62 获赞 133 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43142797/article/details/105490192