剑指offer. 面试题28. 对称的二叉树. 二叉树基础练习

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

解法一:

    bool compareTree(TreeNode *A, TreeNode *B) {

        if(nullptr == A && nullptr == B)
            return true;
        
        if(nullptr == A || nullptr == B)
            return false;

        bool c = A->val == B->val;
        bool l = compareTree(A->left, B->left);
        bool r = compareTree(A->right, B->right);

        return c && l && r;
    }

    TreeNode *mirrorTree(TreeNode *root) {

        if(nullptr == root)
            return nullptr;
        
        TreeNode *tmpNode = root->right;
        root->right = mirrorTree(root->left);
        root->left = mirrorTree(tmpNode);
        return root;
    }

    bool isSymmetric(TreeNode* root) {

        if(nullptr == root)
            return true;

        TreeNode *A = root->left;
        TreeNode *B = mirrorTree(root->right);

        return compareTree(A, B);

    }

 解法二:优化方法

    bool compareTree(TreeNode *A, TreeNode *B) {

        if(nullptr == A && nullptr == B)
            return true;
        
        if(nullptr == A || nullptr == B)
            return false;

        bool c = A->val == B->val;
        bool l = compareTree(A->right, B->left);
        bool r = compareTree(A->left, B->right);

        return c && l && r;
    }

    bool isSymmetric(TreeNode* root) {

        if(nullptr == root)
            return true;

        return compareTree(root->left, root->right);

    }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值