剑指offer题解合集——Week3day4

发布时间:2024年01月13日

剑指offerWeek3

周四:二叉树的镜像

题目链接:二叉树的镜像

输入一个二叉树,将它变换为它的镜像。

数据范围
树中节点数量 [0,100]

样例
输入树:
      8
     / \
    6  10
   / \ / \
  5  7 9 11

 [8,6,10,5,7,9,11,null,null,null,null,null,null,null,null] 
输出树:
      8
     / \
    10  6
   / \ / \
  11 9 7  5

 [8,10,6,11,9,7,5,null,null,null,null,null,null,null,null]

AC代码

/**
 * 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:
    void mirror(TreeNode* root) {
        if (!root) return ;
        swap(root->left, root->right);
        mirror(root->left);
        mirror(root->right);
    }
};

思路:

整体思路

按照树的遍历方式进行遍历,遍历途中交换左右子树即可

周四:对称的二叉树

题目链接:对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。

如果一棵二叉树和它的镜像一样,那么它是对称的。

数据范围
树中节点数量 [0,100]

样例
如下图所示二叉树[1,2,2,3,4,4,3,null,null,null,null,null,null,null,null]为对称二叉树:
    1
   / \
  2   2
 / \ / \
3  4 4  3

如下图所示二叉树[1,2,2,null,4,4,3,null,null,null,null,null,null]不是对称二叉树:
    1
   / \
  2   2
   \ / \
   4 4  3

AC代码

/**
 * 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) {
        return !root || dfs(root->left, root->right);
    }
    
    bool dfs(auto r, auto l)
    {
        if (!l || !r) return !l && !r;
        return l->val == r->val && dfs(l->left, r->right) && dfs(l->right, r->left);
    }
};

思路:

整体思路

跟上题类似,遍历树,然后判断是否是镜像
镜像就是
左子树的左子树和右子树的右子树相等
左子树的右子树和右子树的左子树相等

特别的,空树是镜像的
文章来源:https://blog.csdn.net/qq_51931826/article/details/135563919
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。