【LeetCode】剑指 Offer(10)

简介: 【LeetCode】剑指 Offer(10)

题目:剑指 Offer 27. 二叉树的镜像 - 力扣(Leetcode)


题目的接口:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
    }
};


解题思路:

递归遍历二叉树每个节点的左右孩子,


然后自下而上依次交换左右孩子。


如果到空就返回。


代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
   //遇到空返回
    if(root == nullptr)
    {
        return nullptr;
    }
    //找左孩子
    TreeNode* left = mirrorTree(root->left);
    //找右孩子
    TreeNode* right = mirrorTree(root->right);
    //交换左右孩子
    root->left = right;
    root->right = left;
    //返回交换后的根节点
    return root;
    }
};


过啦!!!


题目:剑指 Offer 28. 对称的二叉树 - 力扣(Leetcode)


题目的接口:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
    }
};


解题思路:

递归遍历二叉树,


如果二叉树为空,返回true,


我一开始是返回false,然后测试的时候,


测试用例返回的是true,


我就根据题意写代码了。


注意一下空指针的访问问题,


想个办法判断一下,


再比较是否镜像对称即可。


代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool is_Symmetric(TreeNode* left, TreeNode* right)
    {
        //如果左右孩子都为空,证明递归完了,返回true
        if(left == nullptr && right == nullptr)
        {
            return true;
        }
        //如果孩子其中有一个为空,返回false(如果不提前判断,之后比较时会错误使用空指针)
        if(!left || !right)
        {
            return false;
        }
        //比较是否镜像对称
        if(left->val != right->val)
        {
            return false;
        }
        //递归搜索
        return is_Symmetric(left->left, right->right) && is_Symmetric(right->left, left->right);
    }
    bool isSymmetric(TreeNode* root) {
        //如果是空树,也是对称(测试用例告诉我的)
        if(root == nullptr)
        {
            return true;
        }
        //递归搜索左右孩子
        return is_Symmetric(root->left, root->right);
    }
};


过啦!!!


写在最后:

以上就是本篇文章的内容了,感谢你的阅读。


如果喜欢本文的话,欢迎点赞和评论,写下你的见解。


如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。


之后我还会输出更多高质量内容,欢迎收看。


 


相关文章
【LeetCode】剑指 Offer(7)
【LeetCode】剑指 Offer(7)
34 0
【LeetCode】剑指 Offer(7)
【LeetCode】剑指 Offer(28)
【LeetCode】剑指 Offer(28)
40 0
【LeetCode】剑指 Offer(28)
【LeetCode】剑指 Offer(20)
【LeetCode】剑指 Offer(20)
56 0
|
搜索推荐
【LeetCode】剑指 Offer(21)
【LeetCode】剑指 Offer(21)
73 0
【LeetCode】剑指 Offer(22)
【LeetCode】剑指 Offer(22)
60 0
【LeetCode】剑指 Offer(14)
【LeetCode】剑指 Offer(14)
40 0
【LeetCode】剑指 Offer(27)
【LeetCode】剑指 Offer(27)
43 0
【LeetCode】剑指 Offer(12)
【LeetCode】剑指 Offer(12)
45 0
【LeetCode】剑指 Offer(3)
【LeetCode】剑指 Offer(3)
51 0
【LeetCode】剑指 Offer(1)
【LeetCode】剑指 Offer(1)
52 0